Chapter overview
In this chapter, I focus on the third of my three key questions about the development of representations of mental life: How do people of different ages deploy their conceptual representations of mental life to reason about specific entities in the world? As in Chapters III-IV, to address this question I draw on data from all of the current studies (Studies 1-4); for details about the methods of these studies, see Chapter II. The goal of this chapter is to provide “snapshots” of mental capacity attributions to various target characters in early childhood, middle childhood, and adulthood, and to explore in finer-grained detail more continuous changes in children’s beliefs about the mental lives of these characters between 4-9y of age, with particular attention to children’s assessment of animate vs. inanimate beings.
General analysis plan
High-level overview
In analyzing these datasets with an eye toward documenting the application or deployment of the conceptual representations described in Chapters III-IV, the basic insight is that the attribution of specific mental capacities to specific target characters provides evidence of how conceptual representations of mental life are deployed in everyday social cognition. In Chapter II, I illustrated this with the following example: If participants who assess the mental capacities of Characters 1, 2, and 3 share one general pattern of mental capacity attributions, and participants who assess the mental capacities of Characters 4, 5, and 6 share another pattern, this provides some evidence that conceptual representations of mental life might play a role in structuring representations of (and interactions with) different classes of beings in the world. Here I will translate this general intuition into a specific analysis plan to be applied to each of these datasets in turn.
Study 1: An adult endpoint
In the context of this dissertation, Study 1 serves to describe a developmental endpoint for conceptual representations of mental life. In this chapter, I focus on what this study can reveal about how US adults use this concept to understand the beings in their world: Which aspects of mental life do they extend to which kinds of target characters? This topic was covered only very briefly in the original publication of this work (Weisman et al., 2017).
To review, Studies 1a-1c employed the “edge case” variant of the general approach, with participants assessing the mental capacities of a beetle, a robot, or both. Studies 1a and 1b were identical: US adults (Study 1a: n=405; Study 1b: n=406) each assessed a single target character on 40 mental capacities. Study 1c employed very similar methods, with the exception that participants (n=200) each assessed both target characters side by side (with left-right position counterbalanced across participants). Because these studies were so similar, in this chapter, I will discuss them in tandem.
Study 1d employed the “diverse characters” variant of the general approach, in which 431 US adults were randomly assigned to assess the same set of 40 mental capacities used in Studies 1a-1d for one of the following 21 target characters: an adult, a child, an infant, a person in a persistent vegetative state, a fetus, a chimpanzee, an elephant, a dolphin, a bear, a dog, a goat, a mouse, a frog, a blue jay, a fish, a beetle, a microbe, a robot, a computer, a car, or a stapler. (See Chapter II and Weisman et al., 2017, for detailed methods.)
Results
Studies 1a-1c
Study 1d
Discussion

Study 2: Conceptual change between middle childhood (7-9y) and adulthood
In the context of this dissertation, Study 2 serves to provide an initial investigation of representations of mental life earlier in development, in what I have called middle childhood (7-9y). In this chapter, I focus on what this study can reveal about changes in the deployment of this concept between middle childhood and adulthood: How do US 7- to 9-year-old children’s attributions of BODY, HEART, and MIND compare to those of adults in their cultural context?
To review, in Study 2, 200 US adults and 200 US children between the ages of 7.01-9.99 years (median: 8.31y) each assessed a single target character on 40 mental capacities. This study employed the “edge case” variant of the general approach, with participants randomly assigned to assess either a beetle or a robot. (See Chapter II for detailed methods.)
Special notes on data processing and analysis
To facilitate comparison between children and adults in Study 2, I use adults’ BODY, HEART, and MIND scales (as described in Chapter IV) to analyze both age groups. For analyses using scales derived from EFA of children’s own responses, see [XX Appendix C].
Results
Children vs. adults
See Figure 5.2, panel A, for BODY, HEART, and MIND scores for both target characters among the 7- to 9-year-old children and adults in Study 2.
In the aggregate, both children and adults seem to have considered the beetle—the animate “edge case” featured in this study—to be a being with a moderately high degree of physiological sensations (mean BODY score among adults: 0.72, 95% CI: [0.66-0.77]; among children: 0.82, 95% CI: [0.79-0.86]) and perceptual-cognitive capacities (mean MIND score among adults: 0.69, 95% CI: [0.64-0.73]; among children: 0.70, 95% CI: [0.66-0.74]). However, adults and children appear to have diverged in their assessments of its abilities in the HEART domain: While adults tended to grant very little in the way of social-emotional abilities (mean HEART score among adults: 0.17, 95% CI: [0.13-0.23]), children’s HEART scores tended to hover around the midpoint of the scale (mean: 0.58, 95% CI: [0.52-0.65]).
For the robot—the inanimate “edge case” featured in this study—both adults and children, in the aggregate, indicated a high degree of perceptual-cognitive abilities (mean MIND score among adults: 0.82, 95% CI: [0.77-0.87]; among children: 0.80, 95% CI: [0.76-0.83]), and appeared to agree that the robot had less in the way of physiological sensations and social-emotional abilities than the beetle. However, the two age groups appear to have diverged in their assessments of the absolute degree of BODY and HEART that they were willing to grant the robot: Adults granted very little in either domain (mean BODY score: 0.10, 95% CI: [0.07-0.13]; mean HEART score: 0.06, 95% CI: [0.03-0.09]), while children granted middling abilities in both domains (mean BODY score: 0.35, 95% CI: [0.29-0.39]; mean HEART score: 0.51, 95% CI: [0.43-0.57]).

Table 5.1: Regression analyses of age-related differences in BODY, HEART, and MIND scores among the 7- to 9-year-old children in Study 2 (scored using adults' scales, as presented in Chapter IV). For each conceptual unit, the table presents a Bayesian regression with 4 fixed effect parameters: (1) the intercept, which is an index of attributions of that conceptual unit among adults; (2) the overall difference in scores for the beetle compared to the grand mean ('GM') among adults; (3) the difference between children's and adults' scores, collapsing across target characters; and (4) the interactive effect of age group and target character. Age effects are highlighted in bold, because they are the primary parameters of interest for these analyses. For each parameter, the table includes the estimate (b) and a 95% credible interval for that estimate. Asterisks indicate 95% credible intervals that do not include 0.
|
BODY |
HEART |
MIND |
| Parameter |
b |
95% CI |
|
b |
95% CI |
|
b |
95% CI |
|
| Intercept (adults) |
0.41 |
[ 0.38, 0.44] |
* |
0.11 |
[ 0.08, 0.15] |
* |
0.75 |
[ 0.72, 0.78] |
* |
| Beetle vs. GM (adults) |
0.31 |
[ 0.28, 0.34] |
* |
0.06 |
[ 0.02, 0.10] |
* |
-0.07 |
[-0.10, -0.04] |
* |
| Children vs. adults |
0.18 |
[ 0.13, 0.22] |
* |
0.43 |
[ 0.37, 0.49] |
* |
0.00 |
[-0.05, 0.04] |
|
| Interaction |
-0.07 |
[-0.11, -0.03] |
* |
-0.02 |
[-0.08, 0.03] |
|
0.02 |
[-0.02, 0.06] |
|
A series of Bayesian regression analyses confirmed these general impressions. Children’s BODY scores were generally higher than adults’ (see Table 5.1, “Children vs. adults” row for the BODY domain), particularly for the robot (see Figure 5.2, top row); as a result, the difference between the beetle and the robot was attenuated among children, relative to adults (see Table 5.1, “Interaction” row for the BODY domain). Children’s HEART scores were also higher than adults’ (see Table 5.1, “Children vs. adults” row for the HEART domain, and Figure 5.2, middle row), but this difference did not vary substantially across target characters (see Table 5.1, “Interaction” row for the BODY domain). There were no substantial differences between children and adults in their MIND scores (see Table 5.1 and Figure 5.2, bottom row).
Taken together, these observations highlight one especially striking difference between children and adults: For both edge cases, regardless of animacy status, children attributed substantially more HEART than did adults. Indeed, fully 70% of adults in Study 2 had HEART scores < 0.08 (i.e., answered at most one of the 6 HEART items with a response of “KINDA,” and otherwise answered “NO” to all HEART items). The more uniform distribution of children’s HEART scores across the 0-1 range stands in stark contrast to this adult standard; see Figure 5.2, panel B.
Age-related differences between 7-9y
In the previous section, I compared the attributions of 7- to 9-year-old children as a group to those of adults. Here, I explore age-related differences within the child sample: How might children’s attributions change over the age range included in this study?
If the snapshots of children vs. adults are reflective of developmental changes, I would expect that, with increasing age, children’s responses would become increasingly adult-like. Based on the age group comparisons in the previous section, this would mean that age would be associated with lower BODY scores, particularly for the robot; and with lower HEART scores for both target characters.

Table 5.2: Regression analyses of age-related differences in BODY, HEART, and MIND scores among the 7- to 9-year-old children in Study 2 (scored using adults' scales, as presented in Chapter IV). For each conceptual unit, the table presents a Bayesian regression with 4 fixed effect parameters: (1) the intercept, which is an index of attributions of that conceptual unit, collapsing across target characters, at the mean age for this sample (8.36y); (2) the overall difference in scores for the beetle compared to the grand mean ('GM'), at the mean age for this sample (8.36y); (3) the overall effect of age on scores, collapsing across target characters; and (4) the interactive effect of age and target character. The last two effects are highlighted in bold, because they are the primary parameters of interest for these analyses. For each parameter, the table includes the estimate (b) and a 95% credible interval for that estimate. Asterisks indicate 95% credible intervals that do not include 0.
|
BODY |
HEART |
MIND |
| Parameter |
b |
95% CI |
|
b |
95% CI |
|
b |
95% CI |
|
| Intercept |
0.58 |
[ 0.55, 0.61] |
* |
0.54 |
[ 0.50, 0.59] |
* |
0.75 |
[ 0.72, 0.78] |
* |
| Beetle vs. GM |
0.24 |
[ 0.21, 0.27] |
* |
0.04 |
[-0.01, 0.08] |
|
-0.05 |
[-0.08, -0.02] |
* |
| Exact age (centered) |
-0.04 |
[-0.07, 0.00] |
* |
-0.07 |
[-0.13, -0.02] |
* |
0.04 |
[ 0.01, 0.07] |
* |
| Interaction |
0.06 |
[ 0.02, 0.09] |
* |
0.04 |
[-0.02, 0.09] |
|
0.01 |
[-0.02, 0.04] |
|
In fact, this is exactly what I observe among the 7- to 9-year-old children in this study.
In line with an adult-like understanding of the animate-inanimate distinction, BODY scores were generally higher among children who assessed the beetle (the animate target character) than among children who assessed the robot (the inanimate target character; see Table 5.2, “Beetle vs. GM” row for the BODY domain). With age, however, children’s BODY scores generally decreased (and Table 5.2, “Exact age” row for the BODY domain), driven by changes in children’s attributions of BODY to the robot. As a result, the difference between the beetle and the robot increased over the age range (see Table 5.2, “Interaction” row for the BODY domain, and Figure 5.3, leftmost plot).
Meanwhile, children’s HEART scores did not differ reliably across the two target characters in this study (see Table 5.2, “Beetle vs. GM” row for the HEART domain)—but with age, children’s HEART scores for both characters generally decreased (and Table 5.2, “Exact age” and “Interaction” rows for the HEART domain, and Figure 5.3, center plot).
Finally, MIND scores were generally higher among children who assessed the robot (the inanimate target character) than among children who assessed the beetle (the animate target character; see Table 5.2, “Beetle vs. GM” row for the MIND domain). In addition to the predicted age-related differences in the BODY and HEART domains, children’s MIND scores for both characters generally increased with age (and Table 5.2, “Exact age” and “Interaction” rows for the MIND domain, and Figure 5.3, rightmost plot).
Discussion
XX INSERT DISCUSSION
OUTLINE: adults: - animate-inanimate distinction strongest in the BODY domain - neither edge case granted much HEART - both edge cases granted fair amount of MIND
children: - BODY: - animate-inanimate distinction in place - but general decreases, especially for the robot (animate-inanimate distinction becomes more clear/robust) - HEART: biggest age differences - both edge cases granted fair amount of HEART - both more than adults - decreases with age - MIND: - both edge cases granted fair amount of MIND - increases with age (though no reliable group differences)
Study 3: Conceptual change over early and middle childhood (4-9y)
Study 3 builds on the investigation of middle childhood (7-9y) initiated in Study 2 and extends this exploration of conceptual change into earlier childhood (4-6y). In this chapter, I again focus on what this study can reveal about changes in the deployment of this concept—i.e., the attribution of BODY, HEART, and MIND to various beings in the world—over the course of early and middle childhood (7-9y).
To review, in Study 3, 116 US adults, 125 “older” children (7.08-9.98 years; median: 8.56y), and 124 “younger” children (4.00-6.98 years; median: 5.03y) each assessed a single target character on 20 mental capacities. This study employed the “diverse characters” variant of the general approach, with participants randomly or pseudo-randomly assigned to assess one of the following 9 characters: an elephant, a goat, a mouse, a bird, a beetle, a teddy bear, a doll, a robot, or a computer. (See Chapter II for detailed methods.)
Special notes on data processing and analysis
As in Study 2, to facilitate comparison between the three age groups included in Study 3, I use adults’ BODY, HEART, and MIND scales (as described in Chapter IV) to analyze both age groups. For analyses using scales derived from EFA of children’s own responses, see [XX Appendix C].
Results
Children vs. adults
See Figure 5.4, panel A, for BODY, HEART, and MIND scores for each of the nine target characters among the younger children (4-6y), older children (7-9y), and adults in Study 3, and Figure 5.4, panel B, for a visualization of scores with target characters grouped into animate beings (elephant, goat, mouse, bird beetle) vs. inanimate objects (teddy bear, doll, robot, computer). To facilitate comparison with Studies 2 and 4, I will focus here on animacy status, rather than analzying all target characters individually.
In the aggregate, all three age groups seem to have considered the animate beings included in this study to have a relatively high degree of physiological sensations (mean BODY score among adults: 0.91, 95% CI: [0.88-0.94]; among older children: 0.84, 95% CI: [0.81-0.88]; among younger children: 0.73, 95% CI: [0.68-0.78]), and a middling degree of social-emotional abilities (mean HEART score among adults: 0.42, 95% CI: [0.34-0.50]; among older children: 0.54, 95% CI: [0.48-0.61]; among younger children: 0.57, 95% CI: [0.51-0.64]). Assessments of animate beings’ abilities in the MIND domain appear to have varied more by age group: While adults tended to grant animate beings a high degree of perceptual-cognitive abilities (mean MIND score among adults: 0.84, 95% CI: [0.79-0.88]), younger children’s MIND scores tended to hover around the midpoint of the scale (mean: 0.50, 95% CI: [0.43-0.56]), with older children falling in between (mean: 0.66, 95% CI: [0.60-0.71]).
For the inanimate beings included in this study, there was a high degree of consensus among adults that such entities had virtually no physiological or social-emotional abilities (mean BODY score: 0.04, 95% CI: [0.01-0.07]; mean HEART score: 0.03, 95% CI: [0.00-0.07]). In contrast, both groups of children, in the aggregate, granted low to moderate abilities to inanimate beings in both the BODY domain (mean BODY score among older children: 0.19, 95% CI: [0.14-0.24]; among younger children: 0.29, 95% CI: [0.20-0.37]) and the HEART domain (mean HEART score among older children: 0.27, 95% CI: [0.19-0.37]; among younger children: 0.32, 95% CI: [0.23-0.40]). All three age groups, in the aggregate, granted middling perceptual-cognitive abilities to these inanimate characters (which included two “intelligent” technologies; mean MIND score among adults: 0.33, 95% CI: [0.24-0.44]; among older children: 0.47, 95% CI: [0.37-0.58]; among younger children: 0.34, 95% CI: [0.25-0.43]).

Table 5.3: Regression analyses of age-related differences in BODY, HEART, and MIND scores among the 4- to 9-year-old children in Study 3 (scored using adults' scales, as presented in Chapter IV). For each conceptual unit, the table presents a Bayesian regression with 4 fixed effect parameters: (1) the intercept, which is an index of attributions of that conceptual unit among adults; (2) the overall difference in scores for the animate characters compared to the grand mean ('GM') among adults; (3) the difference between children's and adults' scores, collapsing across target characters; and (4) the interactive effect of age group and animacy status. Age effects are highlighted in bold, because they are the primary parameters of interest for these analyses.In addition to the fixed effects listed here, these regressions included random intercepts for individual target characters (n=2). For each parameter, the table includes the estimate (b) and a 95% credible interval for that estimate. Asterisks indicate 95% credible intervals that do not include 0.
|
BODY |
HEART |
MIND |
| Parameter |
b |
95% CI |
|
b |
95% CI |
|
b |
95% CI |
|
| Intercept (adults) |
0.47 |
[ 0.44, 0.51] |
* |
0.23 |
[ 0.17, 0.28] |
* |
0.58 |
[ 0.53, 0.64] |
* |
| Animate characters vs. GM (adults) |
0.44 |
[ 0.40, 0.48] |
* |
0.19 |
[ 0.14, 0.25] |
* |
0.25 |
[ 0.20, 0.31] |
* |
| Older children (7-9y) vs. adults |
0.04 |
[-0.01, 0.09] |
|
0.18 |
[ 0.11, 0.26] |
* |
-0.02 |
[-0.10, 0.05] |
|
| Younger children (4-6y) vs. adults |
0.04 |
[-0.02, 0.09] |
|
0.22 |
[ 0.14, 0.29] |
* |
-0.17 |
[-0.24, -0.09] |
* |
| Interaction: Older children (7-9y) vs. adults |
-0.11 |
[-0.16, -0.05] |
* |
-0.06 |
[-0.13, 0.02] |
|
-0.16 |
[-0.23, -0.09] |
* |
| Interaction: Younger children (4-6y) vs. adults |
-0.22 |
[-0.27, -0.16] |
* |
-0.07 |
[-0.14, 0.01] |
|
-0.17 |
[-0.25, -0.10] |
* |
A series of Bayesian regression analyses confirmed these general impressions of differences across age groups.
Neither older nor younger children’s BODY scores were generally higher than adults’ (see Table 5.3, “Older children vs. adults” and “Younger children vs. adults” rows for the BODY domain), but in both groups of children the difference in BODY scores between animate vs. inanimate characters was attenuated, relative to adults (see Table 5.3, “Interaction” row for the BODY domain). Meanwhile, in the HEART domain, both older and younger children’s HEART scores were generally higher than adults’ (see Table 5.3, “Children vs. adults” row for the HEART domain, and Figure 5.4, middle row), but this difference did not vary substantially across target characters (see Table 5.3, “Interaction” row for the BODY domain). Finally, in the MIND domain, younger children’s (but not older children’s) MIND scores were substantially lower than adults’ (see Table 5.3, “Older children vs. adults” and “Younger children vs. adults” rows for the MIND domain). In addition, in both groups of children the difference in MIND scores between animate vs. inanimate characters was attenuated, relative to adults (see Table 5.3, “Interaction” row for the MIND domain).
Age-related differences between 4-9y
Here, I shift from the “snapshot” age gropu comparisons of the previous section to an examination of age-related differences within the child sample: How might children’s attributions to these target characters change between 4-9y of age?
As I argued for Study 2, if the age group differences just described reflect developmental differences, I would expect that, with increasing age, children’s responses would become increasingly adult-like. In this case, this would mean that age would be associated with increased differentation of animate vs. inanimate characters in children’s BODY scores; lower HEART scores (regardless of target character); and higher MIND scores, particularly for animate beings.

Table 5.4: Regression analyses of age-related differences in BODY, HEART, and MIND scores among the 4- to 9-year-old children in Study 3 (scored using adults' scales, as presented in Chapter IV). For each conceptual unit, the table presents a Bayesian regression with 4 fixed effect parameters: (1) the intercept, which is an index of attributions of that conceptual unit, collapsing across target characters, at the mean age for this sample (6.73y); (2) the overall difference in scores for the animate characters compared to the grand mean ('GM'), at the mean age for this sample (6.73y); (3) the overall effect of age on scores, collapsing across target characters; and (4) the interactive effect of age and animacy status. The last two effects are highlighted in bold, because they are the primary parameters of interest for these analyses.In addition to the fixed effects listed here, these regressions included random intercepts for individual target characters (n=9). For each parameter, the table includes the estimate (b) and a 95% credible interval for that estimate. Asterisks indicate 95% credible intervals that do not include 0.
|
BODY |
HEART |
MIND |
| Parameter |
b |
95% CI |
|
b |
95% CI |
|
b |
95% CI |
|
| Intercept |
0.52 |
[ 0.46, 0.57] |
* |
0.43 |
[ 0.34, 0.52] |
* |
0.49 |
[ 0.41, 0.57] |
* |
| Animate characters vs. GM |
0.27 |
[ 0.22, 0.32] |
* |
0.13 |
[ 0.05, 0.22] |
* |
0.09 |
[ 0.00, 0.17] |
* |
| Exact age (centered) |
0.01 |
[-0.01, 0.02] |
|
-0.01 |
[-0.03, 0.01] |
|
0.05 |
[ 0.03, 0.07] |
* |
| Interaction |
0.03 |
[ 0.01, 0.05] |
* |
0.00 |
[-0.02, 0.02] |
|
0.00 |
[-0.02, 0.02] |
|
Some, but not all, of these predictions were born out among the 4- to 9-year-old children in this study.
Age-related differences in the BODY domain conformed to the developmental story suggested by the group differences in the previous section: BODY scores were generally higher among children who assessed one of the animate target characters (elephant, goat, mouse, bird, or beetle) than among children who assessed one of the inanimate target characters (teddy bear, doll, robot, or computer; see Table 5.4, “Animate characters vs. GM” row for the BODY domain), and this difference increased with age (see Table 5.4, “Interaction” row for the BODY domain, and Figure 5.5, panel B, leftmost plot). Visual inspection of Figure 5.5, panel A, suggests that these general trends held true for all animate vs. inanimate target characters. A regression analysis did no reveal any reliable overall differences in BODY scores over the age range (see Table 5.4, “Exact age” row for the BODY domain).
The group differences in the previous section suggested that attributions of HEART should decrease with age. I did not observe evidence of this within this sample of children. As in the BODY domain, HEART scores were generally higher among children who assessed one of the animate target characters than among those who assessed one of the inanimate target characters (see Table 5.4, “Animate characters vs. GM” row for the HEART domain), but there were no reliable age-related changes in children’s HEART scores (see Table 5.4, “Exact age” and “Interaction” rows for the HEART domain,, and Figure 5.5, panel B, center plot). Visual inspection of Figure 5.5, panel A, suggests that this may reflect variability across specific target characters: For some characters (most notably, the robot) attributions of HEART appeared to increase over this age range (4-9y), while for other characters (most notably, the beetle, the doll, and the computer) attributions appeared to decrease; for many of the target characters included in this study there appeared to be no systematic age-related differences in attributions of HEART.
Finally, in line with the group differences in the previous section, MIND scores generally increased with age (see Table 5.4, “Exact age” row for the MIND domain). As in the BODY and MIND domains, MIND scores were generally higher among children who assessed one of the animate target characters than among those who assessed one of the inanimate target characters (see Table 5.4, “Beetle vs. GM” row for the MIND domain)—but although group differences suggested that this difference should increase with age, there was no evidence for this interaction among children (see Table 5.4, “Interaction” row for the MIND domain, and Figure 5.5, panel B, rightmost plot). However, visual inspection of Figure 5.5, panel A, suggests that there were two target characters for whom attributions of MIND did NOT increase with age: namely, the two inert toys (the teddy bear and the doll). Interestingly, this plot suggests that the two technologies (the robot and the computer) appear to be among the characters for whom age-related changes in attributions of MIND may have been most dramatic—but this general trend of increasing attributions of MIND also appears to have applied to all of the animate characters.
Discussion
XX INSERT DISCUSSION
OUTLINE: adults: - like study 2, animate-inanimate distinction strongest in the BODY domain - like study 2, most beings not granted much HEART: variable among the animate beings (and very little among inanimates) - harkens back to ch04 - all animates granted MIND—and some inanimates (technologies, like study 2)
children: - BODY: - animate-inanimate distinction in place even in younger age group than study 2 - but animate-inanimate distinction becomes more clear/robust with age - HEART: - like study 2, substantial child vs. adult differences (children > adults)… - …but NOT reflected in age diffs within the child samples! - especially persistant: over-attributions to mouse (?), robot (increasing!) - maybe HEART diffs are not developmental differences? - MIND: - more strongly than study 2, dramatic increases with age - like adults and like study 2, cuts across animate-inanimate distinction
Study 4: A focus on early childhood (4-5y)
Study 4 builds on Study 3 by providing a targeted investigation of representations of mental life in the preschool years (4-5y). In this chapter, I again focus on what this study can reveal about attributions of BODY, HEART, and MIND at the earliest point in development that I have examined so far, and compare the deployment of this concept among young children vs. adults.
To review, in Study 4, 104 US adults and 43 US children between the ages of 4.02-5.59 years (median: 4.73y) each assessed two target characters on 18 mental capacities, with all aspects of the experimental design tailored to be appropriate for this youngest age group. This study employed the “edge case” variant of the general approach, with participants assessing both a beetle or a robot in sequence (with order counterbalanced across participants). (See Chapter II for detailed methods.)
Special notes on data processing and analysis
As in Studies 2 and 3, to facilitate comparison between children and adults in Study 4, I use adults’ BODY, HEART, and MIND scales (as described in Chapter IV) to analyze both age groups. For analyses using scales derived from EFA of children’s own responses, see [XX Appendix C].
Results
Children vs. adults
See Figure 5.6, panel A, for BODY, HEART, and MIND scores for both target characters among the 4- to 5-year-old children and adults in Study 4. On the whole, participants’ assessments of these two “edge cases” in Study 4 were similar to those of adults’ and 7- to 9-year-old children in Study 2.
As in Study 2, in the aggregate, both children and adults seem to have considered the beetle (the animate character) to be a being with a moderately high degree of physiological sensations (mean BODY score among adults: 0.77, 95% CI: [0.72-0.83]; among children: 0.73, 95% CI: [0.66-0.80]) and perceptual-cognitive capacities (mean MIND score among adults: 0.61, 95% CI: [0.55-0.66]; among children: 0.56, 95% CI: [0.47-0.65]). Adults granted relatively little in the way of social-emotional abilities to the beetle (mean HEART score among adults: 0.23, 95% CI: [0.17-0.29]), but—with the older children in Study 2—children’s HEART scores tended to hover around the midpoint of the scale (mean: 0.46, 95% CI: [0.38-0.55]).
For the robot (the inanimate character) both adults and children, in the aggregate, indicated a moderate degree of perceptual-cognitive abilities (mean MIND score among adults: 0.62, 95% CI: [0.56-0.68]; among children: 0.55, 95% CI: [0.47-0.62]), and appeared to agree that the robot had less in the way of physiological sensations and social-emotional abilities than the beetle. However, echoing the results of Study 2, the two age groups appear to have diverged in their assessments of the absolute degree of BODY and HEART that they were willing to grant the robot: Adults granted very little in either domain (mean BODY score: 0.05, 95% CI: [0.03-0.07]; mean HEART score: 0.05, 95% CI: [0.02-0.08]), while children granted middling abilities in both domains (mean BODY score: 0.36, 95% CI: [0.27-0.44]; mean HEART score: 0.43, 95% CI: [0.34-0.51]).

Table 5.5: Regression analyses of age-related differences in BODY, HEART, and MIND scores among the 4- to 5-year-old children in Study 4 (scored using adults' scales, as presented in Chapter IV). For each conceptual unit, the table presents a Bayesian regression with 4 fixed effect parameters: (1) the intercept, which is an index of attributions of that conceptual unit among adults; (2) the overall difference in scores for the beetle compared to the grand mean ('GM') among adults; (3) the difference between children's and adults' scores, collapsing across target characters; and (4) the interactive effect of age group and target character. Age effects are highlighted in bold, because they are the primary parameters of interest for these analyses. For each parameter, the table includes the estimate (b) and a 95% credible interval for that estimate. Asterisks indicate 95% credible intervals that do not include 0.
|
BODY |
HEART |
MIND |
| Parameter |
b |
95% CI |
|
b |
95% CI |
|
b |
95% CI |
|
| Intercept (adults) |
0.41 |
[ 0.38, 0.44] |
* |
0.14 |
[ 0.10, 0.17] |
* |
0.61 |
[ 0.57, 0.65] |
* |
| Beetle vs. GM (adults) |
0.36 |
[ 0.33, 0.39] |
* |
0.09 |
[ 0.05, 0.12] |
* |
-0.01 |
[-0.05, 0.03] |
|
| Children vs. adults |
0.13 |
[ 0.08, 0.19] |
* |
0.31 |
[ 0.24, 0.38] |
* |
-0.06 |
[-0.14, 0.01] |
|
| Interaction |
-0.18 |
[-0.23, -0.12] |
* |
-0.07 |
[-0.14, 0.00] |
* |
0.01 |
[-0.06, 0.08] |
|
A series of Bayesian regression analyses confirmed these overall impressions, yielding remarkably similar results to the parallel comparison between 7- to 9-year-old children and adults in Study 2.
As in Study 2, children’s BODY scores were generally higher than adults’ (see Table 5.5, “Children vs. adults” row for the BODY domain). This appears to have been particularly true for the robot (see Figure 5.6, top row); as a result, the difference between the beetle and the robot was attenuated among children, relative to adults (see Table 5.5, “Interaction” row for the BODY domain). Again, as in Study 2, children’s HEART scores were also higher than adults’ (see Table 5.5, “Children vs. adults” row for the HEART domain, and Figure 5.6, middle row). In Study 4, this difference between children and adults was slightly more pronounced for the robot than the beetle (see Table 5.5, “Interaction” row for the BODY domain). And yet again, as in Study 2, there were no substantial differences between children and adults in their MIND scores (see Table 5.5 and Figure 5.6, bottom row)
Discussion
General discussion
Chapter conclusion
SCRAPS
Documenting the application or deployment of conceptual representations through XX
[XX CORRECT TO BE NOT ABOUT FACTOR SCORES! change from factor scores to endorsements. Factor scores don’t give a sense of absolutely yes/no.]
Having inferred a conceptual structure for a given group of participants via EFA, I then sought to examine attributions of mental capacities to the particular target characters included in each study within this conceptual structure: To what extent did participants attribute each of the fundamental components of mental life revealed by EFA to a given target character, and how did this attributions vary with age (either within an age group or between age groups)?
To explore this question, for each study I projected children’s data into adults’ conceptual space and examined “factor scores”—summaries of each participant’s attributions of each of factors revealed by EFA. I used the correlation-preserving “ten Berge” method (as implemented in the “psych” package; Revelle, 2018), imputing missing values using the mean (by target character, capacity, and age group). This yielded one factor score for each of (adults’) factors, for each participant. I consider these to be summaries of that person’s attributions of the corresponding latent construct.
I analyzed these factor scores via mixed effects Bayesian regression analyses using the “brms” package for R (Bürkner, 2017). In all of these analyses, I included the maximal random effect structures given the design for the relevant study. Further details varied by study, depending on the number of target characters included in that study, the number of factors revealed by EFA for the relevant group(s) of participants, and the goals of the analysis (e.g., comparing two age groups vs. examining continuous effects of age within one or more groups of participants).
LS0tCnRpdGxlOiAiQ2hhcHRlciBWOiBDaGFuZ2VzIGluIGRlcGxveW1lbnQgb2YgdGhlIGNvbmNlcHQiCm91dHB1dDoKICBodG1sX25vdGVib29rOgogICAgdG9jOiB5ZXMKICAgIHRvY19kZXB0aDogNAogICAgdG9jX2Zsb2F0OiB5ZXMKYWx3YXlzX2FsbG93X2h0bWw6IHllcwotLS0KCmBgYHtyIGdsb2JhbF9vcHRpb25zLCBpbmNsdWRlID0gRn0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGZpZy53aWR0aCA9IDMsIGZpZy5hc3AgPSAwLjY3LAogICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZSA9IEYsIGVjaG8gPSBGKQpgYGAKCmBgYHtyfQojICMgZm9yIGtuaXR0aW5nIHRvIC5kb2N4CiMgb3V0cHV0OgojICAgd29yZF9kb2N1bWVudDoKIyAgICAgcmVmZXJlbmNlX2RvY3g6ICIuL3dvcmQtc3R5bGVzLXJlZmVyZW5jZS5kb2N4IgojIGFsd2F5c19hbGxvd19odG1sOiB5ZXMKCiMgIyBmb3Iga25pdHRpbmcgdG8gLm5iLmh0bWwgCiMgb3V0cHV0OgojICAgaHRtbF9ub3RlYm9vazoKIyAgICAgdG9jOiB5ZXMKIyAgICAgdG9jX2RlcHRoOiA0CiMgICAgIHRvY19mbG9hdDogeWVzCmBgYAoKYGBge3J9CiMgcnVuIHVyLXNldHVwIHNjcmlwdCAod2hpY2ggcnVucyBvdGhlciBzY3JpcHRzKQpzb3VyY2UoIi4vc2NyaXB0cy9fU0VUVVAuUiIpCgojIGxvYWQgaW4gRUZBcyAmIG5hbWVzIGZyb20gQ2hhcHRlcnMgSUlJICYgSVYKc291cmNlKCIuL3NjcmlwdHMvc3RvcmVkX2NoMDMuUiIpCnNvdXJjZSgiLi9zY3JpcHRzL3N0b3JlZF9jaDA0LlIiKQpgYGAKCgojIENoYXB0ZXIgb3ZlcnZpZXcKCkluIHRoaXMgY2hhcHRlciwgSSBmb2N1cyBvbiB0aGUgdGhpcmQgb2YgbXkgdGhyZWUga2V5IHF1ZXN0aW9ucyBhYm91dCB0aGUgZGV2ZWxvcG1lbnQgb2YgcmVwcmVzZW50YXRpb25zIG9mIG1lbnRhbCBsaWZlOiBfSG93wqBkbyBwZW9wbGUgb2YgZGlmZmVyZW50IGFnZXMgZGVwbG95IHRoZWlyIGNvbmNlcHR1YWwgcmVwcmVzZW50YXRpb25zIG9mIG1lbnRhbCBsaWZlIHRvIHJlYXNvbiBhYm91dCBzcGVjaWZpYyBlbnRpdGllcyBpbiB0aGUgd29ybGQ/XyBBcyBpbiBDaGFwdGVycyBJSUktSVYsIHRvIGFkZHJlc3MgdGhpcyBxdWVzdGlvbiBJIGRyYXcgb24gZGF0YSBmcm9tIGFsbCBvZiB0aGUgY3VycmVudCBzdHVkaWVzIChTdHVkaWVzIDEtNCk7IGZvciBkZXRhaWxzIGFib3V0IHRoZSBtZXRob2RzIG9mIHRoZXNlIHN0dWRpZXMsIHNlZSBDaGFwdGVyIElJLiBUaGUgZ29hbCBvZiB0aGlzIGNoYXB0ZXIgaXMgdG8gcHJvdmlkZSAic25hcHNob3RzIiBvZiBtZW50YWwgY2FwYWNpdHkgYXR0cmlidXRpb25zIHRvIHZhcmlvdXMgdGFyZ2V0IGNoYXJhY3RlcnMgaW4gZWFybHkgY2hpbGRob29kLCBtaWRkbGUgY2hpbGRob29kLCBhbmQgYWR1bHRob29kLCBhbmQgdG8gZXhwbG9yZSBpbiBmaW5lci1ncmFpbmVkIGRldGFpbCBtb3JlIGNvbnRpbnVvdXMgY2hhbmdlcyBpbiBjaGlsZHJlbidzIGJlbGllZnMgYWJvdXQgdGhlIG1lbnRhbCBsaXZlcyBvZiB0aGVzZSBjaGFyYWN0ZXJzIGJldHdlZW4gNC05eSBvZiBhZ2UsIHdpdGggcGFydGljdWxhciBhdHRlbnRpb24gdG8gY2hpbGRyZW4ncyBhc3Nlc3NtZW50IG9mIGFuaW1hdGUgdnMuIGluYW5pbWF0ZSBiZWluZ3MuCgoKIyBHZW5lcmFsIGFuYWx5c2lzIHBsYW4KCiMjIEhpZ2gtbGV2ZWwgb3ZlcnZpZXcKCkluIGFuYWx5emluZyB0aGVzZSBkYXRhc2V0cyB3aXRoIGFuIGV5ZSB0b3dhcmQgZG9jdW1lbnRpbmcgdGhlIGFwcGxpY2F0aW9uIG9yIGRlcGxveW1lbnQgb2YgdGhlIGNvbmNlcHR1YWwgcmVwcmVzZW50YXRpb25zIGRlc2NyaWJlZCBpbiBDaGFwdGVycyBJSUktSVYsIHRoZSBiYXNpYyBpbnNpZ2h0IGlzIHRoYXQgdGhlIGF0dHJpYnV0aW9uIG9mIHNwZWNpZmljIG1lbnRhbCBjYXBhY2l0aWVzIHRvIHNwZWNpZmljIHRhcmdldCBjaGFyYWN0ZXJzIHByb3ZpZGVzIGV2aWRlbmNlIG9mIGhvdyBjb25jZXB0dWFsIHJlcHJlc2VudGF0aW9ucyBvZiBtZW50YWwgbGlmZSBhcmUgZGVwbG95ZWQgaW4gZXZlcnlkYXkgc29jaWFsIGNvZ25pdGlvbi4gSW4gQ2hhcHRlciBJSSwgSSBpbGx1c3RyYXRlZCB0aGlzIHdpdGggdGhlIGZvbGxvd2luZyBleGFtcGxlOiBJZiBwYXJ0aWNpcGFudHMgd2hvIGFzc2VzcyB0aGUgbWVudGFsIGNhcGFjaXRpZXMgb2YgQ2hhcmFjdGVycyAxLCAyLCBhbmQgMyBzaGFyZSBvbmUgZ2VuZXJhbCBwYXR0ZXJuIG9mIG1lbnRhbCBjYXBhY2l0eSBhdHRyaWJ1dGlvbnMsIGFuZCBwYXJ0aWNpcGFudHMgd2hvIGFzc2VzcyB0aGUgbWVudGFsIGNhcGFjaXRpZXMgb2YgQ2hhcmFjdGVycyA0LCA1LCBhbmQgNiBzaGFyZSBhbm90aGVyIHBhdHRlcm4sIHRoaXMgcHJvdmlkZXMgc29tZSBldmlkZW5jZSB0aGF0IGNvbmNlcHR1YWwgcmVwcmVzZW50YXRpb25zIG9mIG1lbnRhbCBsaWZlIG1pZ2h0IHBsYXkgYSByb2xlIGluIHN0cnVjdHVyaW5nIHJlcHJlc2VudGF0aW9ucyBvZiAoYW5kIGludGVyYWN0aW9ucyB3aXRoKSBkaWZmZXJlbnQgY2xhc3NlcyBvZiBiZWluZ3MgaW4gdGhlIHdvcmxkLiBIZXJlIEkgd2lsbCB0cmFuc2xhdGUgdGhpcyBnZW5lcmFsIGludHVpdGlvbiBpbnRvIGEgc3BlY2lmaWMgYW5hbHlzaXMgcGxhbiB0byBiZSBhcHBsaWVkIHRvIGVhY2ggb2YgdGhlc2UgZGF0YXNldHMgaW4gdHVybi4gCgojIyBEZXRhaWxzIG9mIGFuYWx5c2VzCgpgYGB7cn0KYW5pbV9sb29rdXAgPC0gZGF0YS5mcmFtZShjaGFyYWN0ZXIgPSBsZXZlbHMoc2NvcmVzX2FsbCRjaGFyYWN0ZXIpKSAlPiUKICBtdXRhdGUoYW5pbV9pbmFuID0gY2FzZV93aGVuKAogICAgY2hhcmFjdGVyICVpbiUgYygiYWR1bHQiLCAiY2hpbGQiLCAiaW5mYW50IiwgCiAgICAgICAgICAgICAgICAgICAgICJwZXJzb24gaW4gYSBwZXJzaXN0ZW50IHZlZ2V0YXRpdmUgc3RhdGUiLCAKICAgICAgICAgICAgICAgICAgICAgInBlcnNvbiBpbiBhIFBWUyIsICJmZXR1cyIsICJjaGltcGFuemVlIiwgCiAgICAgICAgICAgICAgICAgICAgICJlbGVwaGFudCIsICJkb2xwaGluIiwgImJlYXIiLCAiZG9nIiwgImdvYXQiLCAKICAgICAgICAgICAgICAgICAgICAgIm1vdXNlIiwgImZyb2ciLCAiYmx1ZSBqYXkiLCAiYmlyZCIsICJmaXNoIiwgCiAgICAgICAgICAgICAgICAgICAgICJiZWV0bGUiLCAibWljcm9iZSIpIH4gImFuaW1hdGUiLAogICAgY2hhcmFjdGVyICVpbiUgYygicm9ib3QiLCAiY29tcHV0ZXIiLCAiY2FyIiwgInRlZGR5IGJlYXIiLCAKICAgICAgICAgICAgICAgICAgICAgImRvbGwiLCAic3RhcGxlciIpIH4gImluYW5pbWF0ZSIsCiAgICBUUlVFIH4gTkFfY2hhcmFjdGVyXyksCiAgICBhbmltX2luYW4gPSBmYWN0b3IoYW5pbV9pbmFuLCBsZXZlbHMgPSBjKCJhbmltYXRlIiwgImluYW5pbWF0ZSIpKSkKYGBgCgpYWAoKIyBTdHVkeSAxOiBBbiBhZHVsdCBlbmRwb2ludAoKSW4gdGhlIGNvbnRleHQgb2YgdGhpcyBkaXNzZXJ0YXRpb24sIFN0dWR5IDEgc2VydmVzIHRvIGRlc2NyaWJlIGEgZGV2ZWxvcG1lbnRhbCBlbmRwb2ludCBmb3IgY29uY2VwdHVhbCByZXByZXNlbnRhdGlvbnMgb2YgbWVudGFsIGxpZmUuIEluIHRoaXMgY2hhcHRlciwgSSBmb2N1cyBvbiB3aGF0IHRoaXMgc3R1ZHkgY2FuIHJldmVhbCBhYm91dCBob3cgVVMgYWR1bHRzIHVzZSB0aGlzIGNvbmNlcHQgdG8gdW5kZXJzdGFuZCB0aGUgYmVpbmdzIGluIHRoZWlyIHdvcmxkOiBXaGljaCBhc3BlY3RzIG9mIG1lbnRhbCBsaWZlIGRvIHRoZXkgZXh0ZW5kIHRvIHdoaWNoIGtpbmRzIG9mIHRhcmdldCBjaGFyYWN0ZXJzPyBUaGlzIHRvcGljIHdhcyBjb3ZlcmVkIG9ubHkgdmVyeSBicmllZmx5IGluIHRoZSBvcmlnaW5hbCBwdWJsaWNhdGlvbiBvZiB0aGlzIHdvcmsgKFdlaXNtYW4gZXQgYWwuLCAyMDE3KS4gCgpUbyByZXZpZXcsIFN0dWRpZXMgMWEtMWMgZW1wbG95ZWQgdGhlICJlZGdlIGNhc2UiIHZhcmlhbnQgb2YgdGhlIGdlbmVyYWwgYXBwcm9hY2gsIHdpdGggcGFydGljaXBhbnRzIGFzc2Vzc2luZyB0aGUgbWVudGFsIGNhcGFjaXRpZXMgb2YgYSBiZWV0bGUsIGEgcm9ib3QsIG9yIGJvdGguIFN0dWRpZXMgMWEgYW5kIDFiIHdlcmUgaWRlbnRpY2FsOiBVUyBhZHVsdHMgKFN0dWR5IDFhOiBfbl89YHIgbnJvdyhkMWFfYWRfd2lkZSlgOyBTdHVkeSAxYjogX25fPWByIG5yb3coZDFiX2FkX3dpZGUpYCkgZWFjaCBhc3Nlc3NlZCBhIHNpbmdsZSB0YXJnZXQgY2hhcmFjdGVyIG9uIDQwIG1lbnRhbCBjYXBhY2l0aWVzLiBTdHVkeSAxYyBlbXBsb3llZCB2ZXJ5IHNpbWlsYXIgbWV0aG9kcywgd2l0aCB0aGUgZXhjZXB0aW9uIHRoYXQgcGFydGljaXBhbnRzIChfbl89YHIgbnJvdyhkMWNfYWRfd2lkZSkvMmApIGVhY2ggYXNzZXNzZWQgX2JvdGhfIHRhcmdldCBjaGFyYWN0ZXJzIHNpZGUgYnkgc2lkZSAod2l0aCBsZWZ0LXJpZ2h0IHBvc2l0aW9uIGNvdW50ZXJiYWxhbmNlZCBhY3Jvc3MgcGFydGljaXBhbnRzKS4gQmVjYXVzZSB0aGVzZSBzdHVkaWVzIHdlcmUgc28gc2ltaWxhciwgaW4gdGhpcyBjaGFwdGVyLCBJIHdpbGwgZGlzY3VzcyB0aGVtIGluIHRhbmRlbS4KClN0dWR5IDFkIGVtcGxveWVkIHRoZSAiZGl2ZXJzZSBjaGFyYWN0ZXJzIiB2YXJpYW50IG9mIHRoZSBnZW5lcmFsIGFwcHJvYWNoLCBpbiB3aGljaCBgciBucm93KGQxZF9hZF93aWRlKWAgVVMgYWR1bHRzIHdlcmUgcmFuZG9tbHkgYXNzaWduZWQgdG8gYXNzZXNzIHRoZSBzYW1lIHNldCBvZiA0MCBtZW50YWwgY2FwYWNpdGllcyB1c2VkIGluIFN0dWRpZXMgMWEtMWQgZm9yIG9uZSBvZiB0aGUgZm9sbG93aW5nIDIxIHRhcmdldCBjaGFyYWN0ZXJzOiBhbiBhZHVsdCwgYSBjaGlsZCwgYW4gaW5mYW50LCBhIHBlcnNvbiBpbiBhIHBlcnNpc3RlbnQgdmVnZXRhdGl2ZSBzdGF0ZSwgYSBmZXR1cywgYSBjaGltcGFuemVlLCBhbiBlbGVwaGFudCwgYSBkb2xwaGluLCBhIGJlYXIsIGEgZG9nLCBhIGdvYXQsIGEgbW91c2UsIGEgZnJvZywgYSBibHVlIGpheSwgYSBmaXNoLCBhIGJlZXRsZSwgYSBtaWNyb2JlLCBhIHJvYm90LCBhIGNvbXB1dGVyLCBhIGNhciwgb3IgYSBzdGFwbGVyLiAoU2VlIENoYXB0ZXIgSUkgYW5kIFdlaXNtYW4gZXQgYWwuLCAyMDE3LCBmb3IgZGV0YWlsZWQgbWV0aG9kcy4pCgojIyBSZXN1bHRzCgojIyMgU3R1ZGllcyAxYS0xYwoKYGBge3J9CnBsb3RzX2QxYSA8LSBjaGFyYWN0ZXJfbXVsdGlwbG90KGQxYV9hZF9zY29yZWRfYWQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbG90X2xhYmVscyA9IGMoIkExIiwgIkEyIikpCgpwbG90c19kMWFfdGl0bGUgPC0gcGxvdF9ncmlkKAogIGdnZHJhdygpICsgCiAgICBkcmF3X2xhYmVsKCJTdHVkeSAxYTogQWR1bHRzIiwgc2l6ZSA9IDE2LCAKICAgICAgICAgICAgICAgZm9udGZhY2UgPSAnYm9sZCcsIHggPSAwLCBoanVzdCA9IDApLAogIHBsb3RzX2QxYSwKICBuY29sID0gMSwgcmVsX2hlaWdodHMgPSBjKDAuMTIsIDEpKQpgYGAKCmBgYHtyfQpwbG90c19kMWIgPC0gY2hhcmFjdGVyX211bHRpcGxvdChkMWJfYWRfc2NvcmVkX2FkLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxvdF9sYWJlbHMgPSBjKCJCMSIsICJCMiIpKQoKcGxvdHNfZDFiX3RpdGxlIDwtIHBsb3RfZ3JpZCgKICBnZ2RyYXcoKSArIAogICAgZHJhd19sYWJlbCgiU3R1ZHkgMWI6IEFkdWx0cyIsIHNpemUgPSAxNiwgCiAgICAgICAgICAgICAgIGZvbnRmYWNlID0gJ2JvbGQnLCB4ID0gMCwgaGp1c3QgPSAwKSwKICBwbG90c19kMWIsCiAgbmNvbCA9IDEsIHJlbF9oZWlnaHRzID0gYygwLjEyLCAxKSkKYGBgCgpgYGB7cn0KcGxvdHNfZDFjIDwtIGNoYXJhY3Rlcl9tdWx0aXBsb3QoZDFjX2FkX3Njb3JlZF9hZCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsb3RfbGFiZWxzID0gYygiQzEiLCAiQzIiKSkKCnBsb3RzX2QxY190aXRsZSA8LSBwbG90X2dyaWQoCiAgZ2dkcmF3KCkgKyAKICAgIGRyYXdfbGFiZWwoIlN0dWR5IDFjOiBBZHVsdHMiLCBzaXplID0gMTYsIAogICAgICAgICAgICAgICBmb250ZmFjZSA9ICdib2xkJywgeCA9IDAsIGhqdXN0ID0gMCksCiAgcGxvdHNfZDFjLAogIG5jb2wgPSAxLCByZWxfaGVpZ2h0cyA9IGMoMC4xMiwgMSkpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDksIGZpZy5hc3AgPSAwLjR9CiMgaW50ZXJpbSBwbG90IGZvciBlYXNlIG9mIHdyaXRpbmcKcGxvdF9ncmlkKHBsb3RzX2QxYV90aXRsZSwgcGxvdHNfZDFiX3RpdGxlLCBwbG90c19kMWNfdGl0bGUsIG5jb2wgPSAzKQpgYGAKCiMjIyBTdHVkeSAxZAoKYGBge3J9CnBsb3RzX2QxZCA8LSBjaGFyYWN0ZXJfbXVsdGlwbG90KGQxZF9hZF9zY29yZWRfYWQsIHNob3dfYW5pbV9ieV9zdWJqID0gVCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxvdF9sYWJlbHMgPSBjKCJEMSIsICJEMiIsICJEMyIpKQoKcGxvdHNfZDFkX3RpdGxlIDwtIHBsb3RfZ3JpZCgKICBnZ2RyYXcoKSArIAogICAgZHJhd19sYWJlbCgiU3R1ZHkgMWQ6IEFkdWx0cyIsIHNpemUgPSAxNiwgCiAgICAgICAgICAgICAgIGZvbnRmYWNlID0gJ2JvbGQnLCB4ID0gMCwgaGp1c3QgPSAwKSwKICBwbG90c19kMWQsCiAgbmNvbCA9IDEsIHJlbF9oZWlnaHRzID0gYygwLjEyLCAxKSkKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gOSwgZmlnLmFzcCA9IDAuNH0KIyBpbnRlcmltIHBsb3QgZm9yIGVhc2Ugb2Ygd3JpdGluZwpwbG90c19kMWRfdGl0bGUKYGBgCgojIyBEaXNjdXNzaW9uCgpgYGB7cn0KZmlndXJlNS4xX3Bsb3RzIDwtIHBsb3RfZ3JpZCgKICBwbG90X2dyaWQocGxvdHNfZDFhX3RpdGxlLCBwbG90c19kMWJfdGl0bGUsIHBsb3RzX2QxY190aXRsZSwgbmNvbCA9IDMpLAogIHBsb3RzX2QxZF90aXRsZSwgbmNvbCA9IDEpCmBgYAoKYGBge3J9CmZpZ3VyZTUuMV9wbG90c19jYXAgPC0gYWRkX3N1YihmaWd1cmU1LjFfcGxvdHMsIHN0cl93cmFwKCJGaWd1cmUgNS4xOiBVUyBhZHVsdHMnIGF0dHJpYnV0aW9ucyBvZiBCT0RZLCBIRUFSVCwgYW5kIE1JTkQgaW4gKEEpIFN0dWR5IDFhLCAoQikgU3R1ZHkgMWIsIChDKSBTdHVkeSAxYywgYW5kIChEKSBTdHVkeSAxZC4gRm9yIGVhY2ggY29uY2VwdHVhbCB1bml0LCBzY29yZXMgY291bGQgcmFuZ2UgZnJvbSAwLTEuIFBsb3RzIGluY2x1ZGUgc2NvcmVzIGJ5IHRhcmdldCBjaGFyYWN0ZXIgKHBhbmVscyBBMSwgQjEsIEMxLCBhbmQgRDEpLCBzY29yZXMgYnkgYW5pbWFjeSBzdGF0dXMgKHdoZW4gbm90IHJlZHVuZGFudCB3aXRoIHRhcmdldCBjaGFyYWN0ZXI6IHBhbmVsIEQyKSwgYW5kIGRpc3RyaWJ1dGlvbnMgb2Ygc2NvcmVzIChwYW5lbHMgQTIsIEIyLCBDMiwgYW5kIEQzKS4gSW5kaXZpZHVhbCBwYXJ0aWNpcGFudHMgYXJlIHBsb3R0ZWQgYXMgc21hbGwsIHRyYW5zbHVjZW50IGNpcmNsZXMsIGFuZCBtZWFuIHNjb3JlcyBieSBjaGFyYWN0ZXIgYXJlIHBsb3R0ZWQgYXMgbGFyZ2VyLCBzb2xpZCBkaWFtb25kcy4gRXJyb3IgYmFycyBhcmUgOTUlIGJvb3RzdHJhcHBlZCBjb25maWRlbmNlIGludGVydmFscy4iLCAyMDUpLCB4ID0gMCwgaGp1c3QgPSAwKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVCwgZmlnLndpZHRoID0gOSwgZmlnLmFzcCA9IDAuOH0KZ2dkcmF3KGZpZ3VyZTUuMV9wbG90c19jYXApCmBgYAoKCiMgU3R1ZHkgMjogQ29uY2VwdHVhbCBjaGFuZ2UgYmV0d2VlbiBtaWRkbGUgY2hpbGRob29kICg3LTl5KSBhbmQgYWR1bHRob29kCgpJbiB0aGUgY29udGV4dCBvZiB0aGlzIGRpc3NlcnRhdGlvbiwgU3R1ZHkgMiBzZXJ2ZXMgdG8gcHJvdmlkZSBhbiBpbml0aWFsIGludmVzdGlnYXRpb24gb2YgcmVwcmVzZW50YXRpb25zIG9mIG1lbnRhbCBsaWZlIGVhcmxpZXIgaW4gZGV2ZWxvcG1lbnQsIGluIHdoYXQgSSBoYXZlIGNhbGxlZCBtaWRkbGUgY2hpbGRob29kICg3LTl5KS4gSW4gdGhpcyBjaGFwdGVyLCBJIGZvY3VzIG9uIHdoYXQgdGhpcyBzdHVkeSBjYW4gcmV2ZWFsIGFib3V0IGNoYW5nZXMgaW4gdGhlIGRlcGxveW1lbnQgb2YgdGhpcyBjb25jZXB0IGJldHdlZW4gbWlkZGxlIGNoaWxkaG9vZCBhbmQgYWR1bHRob29kOiBIb3cgZG8gVVMgNy0gdG8gOS15ZWFyLW9sZCBjaGlsZHJlbidzIGF0dHJpYnV0aW9ucyBvZiBCT0RZLCBIRUFSVCwgYW5kIE1JTkQgY29tcGFyZSB0byB0aG9zZSBvZiBhZHVsdHMgaW4gdGhlaXIgY3VsdHVyYWwgY29udGV4dD8KClRvIHJldmlldywgaW4gU3R1ZHkgMiwgYHIgbnJvdyhkMl9hZF93aWRlKWAgVVMgYWR1bHRzIGFuZCBgciBucm93KGQyXzc5X3dpZGUpYCBVUyBjaGlsZHJlbiBiZXR3ZWVuIHRoZSBhZ2VzIG9mIGByIHN1bW1hcnkoZDJfNzkkYWdlKVsiTWluLiJdICU+JSByb3VuZCgyKSAlPiUgZm9ybWF0KG5zbWFsbCA9IDIpYC1gciBzdW1tYXJ5KGQyXzc5JGFnZSlbIk1heC4iXSAlPiUgcm91bmQoMikgJT4lIGZvcm1hdChuc21hbGwgPSAyKWAgeWVhcnMgKG1lZGlhbjogYHIgc3VtbWFyeShkMl83OSRhZ2UpWyJNZWRpYW4iXSAlPiUgcm91bmQoMikgJT4lIGZvcm1hdChuc21hbGwgPSAyKWB5KSBlYWNoIGFzc2Vzc2VkIGEgc2luZ2xlIHRhcmdldCBjaGFyYWN0ZXIgb24gNDAgbWVudGFsIGNhcGFjaXRpZXMuIFRoaXMgc3R1ZHkgZW1wbG95ZWQgdGhlICJlZGdlIGNhc2UiIHZhcmlhbnQgb2YgdGhlIGdlbmVyYWwgYXBwcm9hY2gsIHdpdGggcGFydGljaXBhbnRzIHJhbmRvbWx5IGFzc2lnbmVkIHRvIGFzc2VzcyBlaXRoZXIgYSBiZWV0bGUgb3IgYSByb2JvdC4gKFNlZSBDaGFwdGVyIElJIGZvciBkZXRhaWxlZCBtZXRob2RzLikKCiMjIFNwZWNpYWwgbm90ZXMgb24gZGF0YSBwcm9jZXNzaW5nIGFuZCBhbmFseXNpcwoKVG8gZmFjaWxpdGF0ZSBjb21wYXJpc29uIGJldHdlZW4gY2hpbGRyZW4gYW5kIGFkdWx0cyBpbiBTdHVkeSAyLCBJIHVzZSBhZHVsdHMnIF9CT0RZXywgX0hFQVJUXywgYW5kIF9NSU5EXyBzY2FsZXMgKGFzIGRlc2NyaWJlZCBpbiBDaGFwdGVyIElWKSB0byBhbmFseXplIGJvdGggYWdlIGdyb3Vwcy4gRm9yIGFuYWx5c2VzIHVzaW5nIHNjYWxlcyBkZXJpdmVkIGZyb20gRUZBIG9mIGNoaWxkcmVuJ3Mgb3duIHJlc3BvbnNlcywgc2VlIFtYWCBBcHBlbmRpeCBDXS4KCiMjIFJlc3VsdHMKCmBgYHtyfQpkMl83OWFkX3Njb3JlZF9hZCA8LSBmdWxsX2pvaW4oZDJfYWRfc2NvcmVkX2FkLCBkMl83OV9zY29yZWRfYWQpICU+JQogIGxlZnRfam9pbihhbmltX2xvb2t1cCkgJT4lCiAgbXV0YXRlKGNoYXJhY3RlciA9IGZhY3RvcihjaGFyYWN0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBsZXZlbHMoZDJfYWRfc2NvcmVkX2FkJGNoYXJhY3RlcikpLAogICAgICAgICBhZ2VfZ3JvdXAgPSBmYWN0b3IoYWdlX2dyb3VwKSkKCmNvbnRyYXN0cyhkMl83OWFkX3Njb3JlZF9hZCRjaGFyYWN0ZXIpIDwtIGNvbnRyYXN0c19zdW1fZWRnZQpjb250cmFzdHMoZDJfNzlhZF9zY29yZWRfYWQkZmFjdG9yKSA8LSBjb250cmFzdHNfY250M19mYWN0b3IKY29udHJhc3RzKGQyXzc5YWRfc2NvcmVkX2FkJGFuaW1faW5hbikgPC0gY29udHJhc3RzX3N1bTJfYW5pbQpjb250cmFzdHMoZDJfNzlhZF9zY29yZWRfYWQkYWdlX2dyb3VwKSA8LSBjb250cmFzdHNfZHVtMl9hZ2VncApgYGAKCiMjIyBDaGlsZHJlbiB2cy4gYWR1bHRzCgpgYGB7cn0KZDJfNzlhZF9tZWFucyA8LSBkMl83OWFkX3Njb3JlZF9hZCAlPiUKICBncm91cF9ieShhZ2VfZ3JvdXAsIGNoYXJhY3RlciwgZmFjdG9yKSAlPiUKICBtdWx0aV9ib290X3N0YW5kYXJkKGNvbCA9ICJzY29yZSIsIG5hLnJtID0gVCkgJT4lCiAgdW5ncm91cCgpCmBgYAoKU2VlIEZpZ3VyZSA1LjIsIHBhbmVsIEEsIGZvciBfQk9EWV8sIF9IRUFSVF8sIGFuZCBfTUlORF8gc2NvcmVzIGZvciBib3RoIHRhcmdldCBjaGFyYWN0ZXJzIGFtb25nIHRoZSA3LSB0byA5LXllYXItb2xkIGNoaWxkcmVuIGFuZCBhZHVsdHMgaW4gU3R1ZHkgMi4KCkluIHRoZSBhZ2dyZWdhdGUsIGJvdGggY2hpbGRyZW4gYW5kIGFkdWx0cyBzZWVtIHRvIGhhdmUgY29uc2lkZXJlZCB0aGUgYmVldGxl4oCUdGhlIGFuaW1hdGUgImVkZ2UgY2FzZSIgZmVhdHVyZWQgaW4gdGhpcyBzdHVkeeKAlHRvIGJlIGEgYmVpbmcgd2l0aCBhIG1vZGVyYXRlbHkgaGlnaCBkZWdyZWUgb2YgcGh5c2lvbG9naWNhbCBzZW5zYXRpb25zIChtZWFuIF9CT0RZXyBzY29yZSBhbW9uZyBhZHVsdHM6IGByIHNjb3JlX21lYW5fcHJpbnRfZnVuKGQyXzc5YWRfbWVhbnMsICJCT0RZIiwgImFkdWx0cyIsICJiZWV0bGUiKWA7IGFtb25nIGNoaWxkcmVuOiBgciBzY29yZV9tZWFuX3ByaW50X2Z1bihkMl83OWFkX21lYW5zLCAiQk9EWSIsICJjaGlsZHJlbjc5IiwgImJlZXRsZSIpYCkgYW5kIHBlcmNlcHR1YWwtY29nbml0aXZlIGNhcGFjaXRpZXMgKG1lYW4gX01JTkRfIHNjb3JlIGFtb25nIGFkdWx0czogYHIgc2NvcmVfbWVhbl9wcmludF9mdW4oZDJfNzlhZF9tZWFucywgIk1JTkQiLCAiYWR1bHRzIiwgImJlZXRsZSIpYDsgYW1vbmcgY2hpbGRyZW46IGByIHNjb3JlX21lYW5fcHJpbnRfZnVuKGQyXzc5YWRfbWVhbnMsICJNSU5EIiwgImNoaWxkcmVuNzkiLCAiYmVldGxlIilgKS4gSG93ZXZlciwgYWR1bHRzIGFuZCBjaGlsZHJlbiBhcHBlYXIgdG8gaGF2ZSBkaXZlcmdlZCBpbiB0aGVpciBhc3Nlc3NtZW50cyBvZiBpdHMgYWJpbGl0aWVzIGluIHRoZSBIRUFSVCBkb21haW46IFdoaWxlIGFkdWx0cyB0ZW5kZWQgdG8gZ3JhbnQgdmVyeSBsaXR0bGUgaW4gdGhlIHdheSBvZiBzb2NpYWwtZW1vdGlvbmFsIGFiaWxpdGllcyAobWVhbiBfSEVBUlRfIHNjb3JlIGFtb25nIGFkdWx0czogYHIgc2NvcmVfbWVhbl9wcmludF9mdW4oZDJfNzlhZF9tZWFucywgIkhFQVJUIiwgImFkdWx0cyIsICJiZWV0bGUiKWApLCBjaGlsZHJlbidzIF9IRUFSVF8gc2NvcmVzIHRlbmRlZCB0byBob3ZlciBhcm91bmQgdGhlIG1pZHBvaW50IG9mIHRoZSBzY2FsZSAobWVhbjogYHIgc2NvcmVfbWVhbl9wcmludF9mdW4oZDJfNzlhZF9tZWFucywgIkhFQVJUIiwgImNoaWxkcmVuNzkiLCAiYmVldGxlIilgKS4KCkZvciB0aGUgcm9ib3TigJR0aGUgaW5hbmltYXRlICJlZGdlIGNhc2UiIGZlYXR1cmVkIGluIHRoaXMgc3R1ZHnigJRib3RoIGFkdWx0cyBhbmQgY2hpbGRyZW4sIGluIHRoZSBhZ2dyZWdhdGUsIGluZGljYXRlZCBhIGhpZ2ggZGVncmVlIG9mIHBlcmNlcHR1YWwtY29nbml0aXZlIGFiaWxpdGllcyAobWVhbiBfTUlORF8gc2NvcmUgYW1vbmcgYWR1bHRzOiBgciBzY29yZV9tZWFuX3ByaW50X2Z1bihkMl83OWFkX21lYW5zLCAiTUlORCIsICJhZHVsdHMiLCAicm9ib3QiKWA7IGFtb25nIGNoaWxkcmVuOiBgciBzY29yZV9tZWFuX3ByaW50X2Z1bihkMl83OWFkX21lYW5zLCAiTUlORCIsICJjaGlsZHJlbjc5IiwgInJvYm90IilgKSwgYW5kIGFwcGVhcmVkIHRvIGFncmVlIHRoYXQgdGhlIHJvYm90IGhhZCBsZXNzIGluIHRoZSB3YXkgb2YgcGh5c2lvbG9naWNhbCBzZW5zYXRpb25zIGFuZCBzb2NpYWwtZW1vdGlvbmFsIGFiaWxpdGllcyB0aGFuIHRoZSBiZWV0bGUuIEhvd2V2ZXIsIHRoZSB0d28gYWdlIGdyb3VwcyBhcHBlYXIgdG8gaGF2ZSBkaXZlcmdlZCBpbiB0aGVpciBhc3Nlc3NtZW50cyBvZiB0aGUgYWJzb2x1dGUgZGVncmVlIG9mIEJPRFkgYW5kIEhFQVJUIHRoYXQgdGhleSB3ZXJlIHdpbGxpbmcgdG8gZ3JhbnQgdGhlIHJvYm90OiBBZHVsdHMgZ3JhbnRlZCB2ZXJ5IGxpdHRsZSBpbiBlaXRoZXIgZG9tYWluIChtZWFuIF9CT0RZXyBzY29yZTogYHIgc2NvcmVfbWVhbl9wcmludF9mdW4oZDJfNzlhZF9tZWFucywgIkJPRFkiLCAiYWR1bHRzIiwgInJvYm90IilgOyBtZWFuIF9IRUFSVF8gc2NvcmU6IGByIHNjb3JlX21lYW5fcHJpbnRfZnVuKGQyXzc5YWRfbWVhbnMsICJIRUFSVCIsICJhZHVsdHMiLCAicm9ib3QiKWApLCB3aGlsZSBjaGlsZHJlbiBncmFudGVkIG1pZGRsaW5nIGFiaWxpdGllcyBpbiBib3RoIGRvbWFpbnMgKG1lYW4gX0JPRFlfIHNjb3JlOiBgciBzY29yZV9tZWFuX3ByaW50X2Z1bihkMl83OWFkX21lYW5zLCAiQk9EWSIsICJjaGlsZHJlbjc5IiwgInJvYm90IilgOyBtZWFuIF9IRUFSVF8gc2NvcmU6IGByIHNjb3JlX21lYW5fcHJpbnRfZnVuKGQyXzc5YWRfbWVhbnMsICJIRUFSVCIsICJjaGlsZHJlbjc5IiwgInJvYm90IilgKS4KCmBgYHtyfQpmaWd1cmU1LjJfcGxvdHMgPC0gY2hhcmFjdGVyX211bHRpcGxvdF9hZ2UoCiAgZGZfc2NvcmVkID0gZnVsbF9qb2luKGQyX2FkX3Njb3JlZF9hZCwgZDJfNzlfc2NvcmVkX2FkKSwgCiAgc2hvd19hbmltX2J5X3N1YmogPSBULAogIGFnZV9sZXZlbHMgPSBjKCJjaGlsZHJlbjc5IiwgImFkdWx0cyIpLAogIGFnZV9sYWJlbHMgPSBjKCJDaGlsZHJlbiwgNy05eSIsICJBZHVsdHMiKSwKICBwbG90X21hcmdfdXBwZXIgPSAtNDUsIGF4aXNfaGVpZ2h0ID0gMC4wOSkKYGBgCgpgYGB7cn0KZmlndXJlNS4yX3Bsb3RzX2NhcCA8LSBhZGRfc3ViKGZpZ3VyZTUuMl9wbG90cywgc3RyX3dyYXAoIkZpZ3VyZSA1LjI6IEF0dHJpYnV0aW9ucyBvZiBCT0RZLCBIRUFSVCwgYW5kIE1JTkQgYW1vbmcgY2hpbGRyZW4gKDctOXkpIGFuZCBhZHVsdHMgaW4gU3R1ZHkgMi4gRm9yIGVhY2ggY29uY2VwdHVhbCB1bml0LCBzY29yZXMgY291bGQgcmFuZ2UgZnJvbSAwLTEuIFBsb3RzIGluY2x1ZGUgKEEpIHNjb3JlcyBieSB0YXJnZXQgY2hhcmFjdGVyLCBhbmQgKEIpIGRpc3RyaWJ1dGlvbnMgb2Ygc2NvcmVzLiBJbmRpdmlkdWFsIHBhcnRpY2lwYW50cyBhcmUgcGxvdHRlZCBhcyBzbWFsbCwgdHJhbnNsdWNlbnQgY2lyY2xlcywgYW5kIG1lYW4gc2NvcmVzIGJ5IGNoYXJhY3RlciBhcmUgcGxvdHRlZCBhcyBsYXJnZXIsIHNvbGlkIGRpYW1vbmRzLiBFcnJvciBiYXJzIGFyZSA5NSUgYm9vdHN0cmFwcGVkIGNvbmZpZGVuY2UgaW50ZXJ2YWxzLiIsIDkwKSwgeCA9IDAsIGhqdXN0ID0gMCkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFQsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjh9CmdnZHJhdyhmaWd1cmU1LjJfcGxvdHNfY2FwKQpgYGAKCmBgYHtyfQpkMl83OWFkX250aWxlcyA8LSBkMl83OWFkX3Njb3JlZF9hZCAlPiUKICBncm91cF9ieShhZ2VfZ3JvdXAsIGZhY3RvcikgJT4lCiAgbXV0YXRlKGJpbiA9IGN1dChzY29yZSwgMTMpLAogICAgICAgICBiaW5fbnVtID0gYXMubnVtZXJpYyhmYWN0b3IoYmluKSkpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBjb3VudChhZ2VfZ3JvdXAsIGZhY3RvciwgYmluLCBiaW5fbnVtKSAlPiUKICBncm91cF9ieShhZ2VfZ3JvdXAsIGZhY3RvcikgJT4lCiAgbXV0YXRlKHByb3AgPSBuL3N1bShuKSkKZDJfNzlhZF9udGlsZXMKYGBgCgpgYGB7cn0KIyByX2QyX2RldmdwX0JPRFkgPC0gYnJtKHNjb3JlIH4gYW5pbV9pbmFuICogYWdlX2dyb3VwLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGQyXzc5YWRfc2NvcmVkX2FkICU+JQojICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoZmFjdG9yID09ICJCT0RZIiksCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OSkpCiMgCiMgc2F2ZVJEUyhyX2QyX2RldmdwX0JPRFksICIuL3N0b3JlZC9icm1zX21vZGVscy9yX2QyX2RldmdwX0JPRFkiKQoKcl9kMl9kZXZncF9CT0RZIDwtIHJlYWRSRFMoIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDJfZGV2Z3BfQk9EWSIpCgpzdW1tYXJ5KHJfZDJfZGV2Z3BfQk9EWSkKYGBgCgpgYGB7cn0KIyByX2QyX2RldmdwX0hFQVJUIDwtIGJybShzY29yZSB+IGFuaW1faW5hbiAqIGFnZV9ncm91cCwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkMl83OWFkX3Njb3JlZF9hZCAlPiUKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKGZhY3RvciA9PSAiSEVBUlQiKSwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVzID0gNCwgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5KSkKIyAKIyBzYXZlUkRTKHJfZDJfZGV2Z3BfSEVBUlQsICIuL3N0b3JlZC9icm1zX21vZGVscy9yX2QyX2RldmdwX0hFQVJUIikKCnJfZDJfZGV2Z3BfSEVBUlQgPC0gcmVhZFJEUygiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kMl9kZXZncF9IRUFSVCIpCgpzdW1tYXJ5KHJfZDJfZGV2Z3BfSEVBUlQpCmBgYAoKYGBge3J9CiMgcl9kMl9kZXZncF9NSU5EIDwtIGJybShzY29yZSB+IGFuaW1faW5hbiAqIGFnZV9ncm91cCwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkMl83OWFkX3Njb3JlZF9hZCAlPiUKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKGZhY3RvciA9PSAiTUlORCIpLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTkpKQojIAojIHNhdmVSRFMocl9kMl9kZXZncF9NSU5ELCAiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kMl9kZXZncF9NSU5EIikKCnJfZDJfZGV2Z3BfTUlORCA8LSByZWFkUkRTKCIuL3N0b3JlZC9icm1zX21vZGVscy9yX2QyX2RldmdwX01JTkQiKQoKc3VtbWFyeShyX2QyX2RldmdwX01JTkQpCmBgYAoKYGBge3J9CnJlZ3RhYl9kMl9kZXZncCA8LSByZWd0YWJfZGV2Z3BfZnVuKAogIHJlZ19ib2R5ID0gcl9kMl9kZXZncF9CT0RZLCAKICByZWdfaGVhcnQgPSByX2QyX2RldmdwX0hFQVJULAogIHJlZ19taW5kID0gcl9kMl9kZXZncF9NSU5ELAogIGFnZV9sZXZlbHMgPSBjKCJhZ2VfZ3JvdXBfY2hpbGQiKSwgCiAgYWdlX2xhYmVscyA9IGMoIkNoaWxkcmVuIHZzLiBhZHVsdHMiKSkKYGBgCgpgYGB7cn0KdGFibGU1LjEgPC0gZGV2Z3BfdGFibGVfZnVuKHJlZ3RhYl9kZXZncCA9IHJlZ3RhYl9kMl9kZXZncCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuX2NoYXJhY3RlcnMgPSAyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX25hbWUgPSAiVGFibGUgNS4xIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHVkeV9uYW1lID0gIlN0dWR5IDIiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFnZV9ncm91cCA9ICI3LSB0byA5LXllYXItb2xkIGNoaWxkcmVuIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuX2FnZV9ncm91cHMgPSAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcl9jb21wYXJlX2xhYmVsID0gIkJlZXRsZSB2cy4gR00iKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0KdGFibGU1LjEKYGBgCgpBIHNlcmllcyBvZiBCYXllc2lhbiByZWdyZXNzaW9uIGFuYWx5c2VzIGNvbmZpcm1lZCB0aGVzZSBnZW5lcmFsIGltcHJlc3Npb25zLiBDaGlsZHJlbidzIF9CT0RZXyBzY29yZXMgd2VyZSBnZW5lcmFsbHkgaGlnaGVyIHRoYW4gYWR1bHRzJyAoc2VlIFRhYmxlIDUuMSwgIkNoaWxkcmVuIHZzLiBhZHVsdHMiIHJvdyBmb3IgdGhlIEJPRFkgZG9tYWluKSwgcGFydGljdWxhcmx5IGZvciB0aGUgcm9ib3QgKHNlZSBGaWd1cmUgNS4yLCB0b3Agcm93KTsgYXMgYSByZXN1bHQsIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGJlZXRsZSBhbmQgdGhlIHJvYm90IHdhcyBhdHRlbnVhdGVkIGFtb25nIGNoaWxkcmVuLCByZWxhdGl2ZSB0byBhZHVsdHMgKHNlZSBUYWJsZSA1LjEsICJJbnRlcmFjdGlvbiIgcm93IGZvciB0aGUgQk9EWSBkb21haW4pLiBDaGlsZHJlbidzIF9IRUFSVF8gc2NvcmVzIHdlcmUgYWxzbyBoaWdoZXIgdGhhbiBhZHVsdHMnIChzZWUgVGFibGUgNS4xLCAiQ2hpbGRyZW4gdnMuIGFkdWx0cyIgcm93IGZvciB0aGUgSEVBUlQgZG9tYWluLCBhbmQgRmlndXJlIDUuMiwgbWlkZGxlIHJvdyksIGJ1dCB0aGlzIGRpZmZlcmVuY2UgZGlkIG5vdCB2YXJ5IHN1YnN0YW50aWFsbHkgYWNyb3NzIHRhcmdldCBjaGFyYWN0ZXJzIChzZWUgVGFibGUgNS4xLCAiSW50ZXJhY3Rpb24iIHJvdyBmb3IgdGhlIEJPRFkgZG9tYWluKS4gVGhlcmUgd2VyZSBubyBzdWJzdGFudGlhbCBkaWZmZXJlbmNlcyBiZXR3ZWVuIGNoaWxkcmVuIGFuZCBhZHVsdHMgaW4gdGhlaXIgX01JTkRfIHNjb3JlcyAoc2VlIFRhYmxlIDUuMSBhbmQgRmlndXJlIDUuMiwgYm90dG9tIHJvdykuCgpUYWtlbiB0b2dldGhlciwgdGhlc2Ugb2JzZXJ2YXRpb25zIGhpZ2hsaWdodCBvbmUgZXNwZWNpYWxseSBzdHJpa2luZyBkaWZmZXJlbmNlIGJldHdlZW4gY2hpbGRyZW4gYW5kIGFkdWx0czogRm9yIGJvdGggZWRnZSBjYXNlcywgcmVnYXJkbGVzcyBvZiBhbmltYWN5IHN0YXR1cywgY2hpbGRyZW4gYXR0cmlidXRlZCBzdWJzdGFudGlhbGx5IG1vcmUgSEVBUlQgdGhhbiBkaWQgYWR1bHRzLiBJbmRlZWQsIGZ1bGx5IGByIHJvdW5kKChkMl83OWFkX250aWxlcyAlPiUgZmlsdGVyKGFnZV9ncm91cCA9PSAiYWR1bHRzIiwgZmFjdG9yID09ICJIRUFSVCIsIGJpbl9udW0gPT0gMSkpJHByb3AsIDIpKjEwMGAlIG9mIGFkdWx0cyBpbiBTdHVkeSAyIGhhZCBfSEVBUlRfIHNjb3JlcyA8IGByIGdzdWIoIl4uKiwiLCAiIiwgKGQyXzc5YWRfbnRpbGVzICU+JSBmaWx0ZXIoYWdlX2dyb3VwID09ICJhZHVsdHMiLCBmYWN0b3IgPT0gIkhFQVJUIiwgYmluX251bSA9PSAxKSkkYmluKSAlPiUgZ3N1YigiXFxdIiwgIiIsIC4pICU+JSBhcy5udW1lcmljKCkgJT4lIGNlaWxpbmdfZGVjKDIpYCAoaS5lLiwgYW5zd2VyZWQgYXQgbW9zdCBfb25lXyBvZiB0aGUgNiBfSEVBUlRfIGl0ZW1zIHdpdGggYSByZXNwb25zZSBvZiAiS0lOREEsIiBhbmQgb3RoZXJ3aXNlIGFuc3dlcmVkICJOTyIgdG8gYWxsIF9IRUFSVF8gaXRlbXMpLiBUaGUgbW9yZSB1bmlmb3JtIGRpc3RyaWJ1dGlvbiBvZiBjaGlsZHJlbidzIF9IRUFSVF8gc2NvcmVzIGFjcm9zcyB0aGUgMC0xIHJhbmdlIHN0YW5kcyBpbiBzdGFyayBjb250cmFzdCB0byB0aGlzIGFkdWx0IHN0YW5kYXJkOyBzZWUgRmlndXJlIDUuMiwgcGFuZWwgQi4KCiMjIyBBZ2UtcmVsYXRlZCBkaWZmZXJlbmNlcyBiZXR3ZWVuIDctOXkKCkluIHRoZSBwcmV2aW91cyBzZWN0aW9uLCBJIGNvbXBhcmVkIHRoZSBhdHRyaWJ1dGlvbnMgb2YgNy0gdG8gOS15ZWFyLW9sZCBjaGlsZHJlbiBhcyBhIGdyb3VwIHRvIHRob3NlIG9mIGFkdWx0cy4gSGVyZSwgSSBleHBsb3JlIGFnZS1yZWxhdGVkIGRpZmZlcmVuY2VzIHdpdGhpbiB0aGUgY2hpbGQgc2FtcGxlOiBIb3cgbWlnaHQgY2hpbGRyZW4ncyBhdHRyaWJ1dGlvbnMgY2hhbmdlIG92ZXIgdGhlIGFnZSByYW5nZSBpbmNsdWRlZCBpbiB0aGlzIHN0dWR5PyAKCklmIHRoZSBzbmFwc2hvdHMgb2YgY2hpbGRyZW4gdnMuIGFkdWx0cyBhcmUgcmVmbGVjdGl2ZSBvZiBfZGV2ZWxvcG1lbnRhbF8gY2hhbmdlcywgSSB3b3VsZCBleHBlY3QgdGhhdCwgd2l0aCBpbmNyZWFzaW5nIGFnZSwgY2hpbGRyZW4ncyByZXNwb25zZXMgd291bGQgYmVjb21lIGluY3JlYXNpbmdseSBhZHVsdC1saWtlLiBCYXNlZCBvbiB0aGUgYWdlIGdyb3VwIGNvbXBhcmlzb25zIGluIHRoZSBwcmV2aW91cyBzZWN0aW9uLCB0aGlzIHdvdWxkIG1lYW4gdGhhdCBhZ2Ugd291bGQgYmUgYXNzb2NpYXRlZCB3aXRoIGxvd2VyIF9CT0RZXyBzY29yZXMsIHBhcnRpY3VsYXJseSBmb3IgdGhlIHJvYm90OyBhbmQgd2l0aCBsb3dlciBfSEVBUlRfIHNjb3JlcyBmb3IgYm90aCB0YXJnZXQgY2hhcmFjdGVycy4KCmBgYHtyfQpwbG90c19kMl9kZXYgPC0gY2hhcmFjdGVyX2RldnBsb3QoZGZfc2NvcmVkX2FkID0gZDJfYWRfc2NvcmVkX2FkLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRmX3Njb3JlZF9jaCA9IGQyXzc5X3Njb3JlZF9hZCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZl9hZ2UgPSBkMl83OSkKYGBgCgpgYGB7cn0KZmlndXJlNS4zIDwtIHBsb3RzX2QyX2RldiArCiAgbGFicyh0aXRsZSA9ICJTdHVkeSAyOiBDaGlsZHJlbiwgNy05eSIpCmBgYAoKYGBge3J9CmZpZ3VyZTUuM19wbG90c19jYXAgPC0gYWRkX3N1YihmaWd1cmU1LjMsIHN0cl93cmFwKCJGaWd1cmUgNS4zOiBDaGFuZ2VzIGluIGF0dHJpYnV0aW9ucyBvZiBCT0RZLCBIRUFSVCwgYW5kIE1JTkQgYW1vbmcgNy0gdG8gOS15ZWFyLW9sZCBjaGlsZHJlbiBpbiBTdHVkeSAyLiBGb3IgZWFjaCBjb25jZXB0dWFsIHVuaXQsIHNjb3JlcyBjb3VsZCByYW5nZSBmcm9tIDAtMS4gSW5kaXZpZHVhbCBjaGlsZHJlbiBhcmUgcGxvdHRlZCBhcyBzbWFsbCwgdHJhbnNsdWNlbnQgY2lyY2xlczsgbWVhbiBzY29yZXMgYW1vbmcgYWR1bHRzIGFyZSBwbG90dGVkIGFzIGxhcmdlciwgc29saWQgZGlhbW9uZHMuIEVycm9yIGJhcnMgYXJlIDk1JSBib290c3RyYXBwZWQgY29uZmlkZW5jZSBpbnRlcnZhbHMuIExpbmVzIGNvcnJlc3BvbmQgdG8gc2ltcGxlIGxpbmVhciByZWdyZXNzaW9ucyAoZm9ybXVsYTogc2NvcmUgfiBhZ2UpLiIsIDExMCksIHggPSAwLCBoanVzdCA9IDApCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBULCBmaWcud2lkdGggPSA1LCBmaWcuYXNwID0gMC41fQpnZ2RyYXcoZmlndXJlNS4zX3Bsb3RzX2NhcCkKYGBgCgpgYGB7cn0KZDJfNzlhZ2Vfc2NvcmVkX2FkIDwtIGQyXzc5X3Njb3JlZF9hZCAlPiUKICBsZWZ0X2pvaW4oZDJfNzkgJT4lIGRpc3RpbmN0KHN1YmlkLCBhZ2UpKSAlPiUKICBsZWZ0X2pvaW4oYW5pbV9sb29rdXApICU+JQogIGZpbHRlcighaXMubmEoYWdlKSkgJT4lCiAgbXV0YXRlKGNoYXJhY3RlciA9IGZhY3RvcihjaGFyYWN0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBsZXZlbHMoZDJfYWRfc2NvcmVkX2FkJGNoYXJhY3RlcikpLAogICAgICAgICBhZ2VfY2VudGVyZWQgPSBzY2FsZShhZ2UsIHNjYWxlID0gRikpCgpjb250cmFzdHMoZDJfNzlhZ2Vfc2NvcmVkX2FkJGNoYXJhY3RlcikgPC0gY29udHJhc3RzX3N1bV9lZGdlCmNvbnRyYXN0cyhkMl83OWFnZV9zY29yZWRfYWQkZmFjdG9yKSA8LSBjb250cmFzdHNfY250M19mYWN0b3IKY29udHJhc3RzKGQyXzc5YWdlX3Njb3JlZF9hZCRhbmltX2luYW4pIDwtIGNvbnRyYXN0c19zdW0yX2FuaW0KYGBgCgpgYGB7cn0KIyByX2QyX2RldnNjb3JlX0JPRFkgPC0gYnJtKHNjb3JlIH4gYW5pbV9pbmFuICogYWdlX2NlbnRlcmVkLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGQyXzc5YWdlX3Njb3JlZF9hZCAlPiUKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKGZhY3RvciA9PSAiQk9EWSIpLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTkpKQojIAojIHNhdmVSRFMocl9kMl9kZXZzY29yZV9CT0RZLCAiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kMl9kZXZzY29yZV9CT0RZIikKCnJfZDJfZGV2c2NvcmVfQk9EWSA8LSByZWFkUkRTKCIuL3N0b3JlZC9icm1zX21vZGVscy9yX2QyX2RldnNjb3JlX0JPRFkiKQoKc3VtbWFyeShyX2QyX2RldnNjb3JlX0JPRFkpCmBgYAoKYGBge3J9CiMgcl9kMl9kZXZzY29yZV9IRUFSVCA8LSBicm0oc2NvcmUgfiBhbmltX2luYW4gKiBhZ2VfY2VudGVyZWQsCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZDJfNzlhZ2Vfc2NvcmVkX2FkICU+JQojICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoZmFjdG9yID09ICJIRUFSVCIpLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTkpKQojIAojIHNhdmVSRFMocl9kMl9kZXZzY29yZV9IRUFSVCwgIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDJfZGV2c2NvcmVfSEVBUlQiKQoKcl9kMl9kZXZzY29yZV9IRUFSVCA8LSByZWFkUkRTKCIuL3N0b3JlZC9icm1zX21vZGVscy9yX2QyX2RldnNjb3JlX0hFQVJUIikKCnN1bW1hcnkocl9kMl9kZXZzY29yZV9IRUFSVCkKYGBgCgpgYGB7cn0KIyByX2QyX2RldnNjb3JlX01JTkQgPC0gYnJtKHNjb3JlIH4gYW5pbV9pbmFuICogYWdlX2NlbnRlcmVkLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGQyXzc5YWdlX3Njb3JlZF9hZCAlPiUKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKGZhY3RvciA9PSAiTUlORCIpLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTkpKQojIAojIHNhdmVSRFMocl9kMl9kZXZzY29yZV9NSU5ELCAiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kMl9kZXZzY29yZV9NSU5EIikKCnJfZDJfZGV2c2NvcmVfTUlORCA8LSByZWFkUkRTKCIuL3N0b3JlZC9icm1zX21vZGVscy9yX2QyX2RldnNjb3JlX01JTkQiKQoKc3VtbWFyeShyX2QyX2RldnNjb3JlX01JTkQpCmBgYAoKYGBge3J9CnJlZ3RhYl9kMl9kZXZzY29yZSA8LSByZWd0YWJfZGV2c2NvcmVfZnVuKHJlZ19ib2R5ID0gcl9kMl9kZXZzY29yZV9CT0RZLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdfaGVhcnQgPSByX2QyX2RldnNjb3JlX0hFQVJULAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdfbWluZCA9IHJfZDJfZGV2c2NvcmVfTUlORCkKYGBgCgpgYGB7cn0KdGFibGU1LjIgPC0gZGV2c2NvcmVfdGFibGVfZnVuKHJlZ3RhYl9kZXZzY29yZSA9IHJlZ3RhYl9kMl9kZXZzY29yZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuX2NoYXJhY3RlcnMgPSAyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX25hbWUgPSAiVGFibGUgNS4yIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHVkeV9uYW1lID0gIlN0dWR5IDIiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFnZV9yYW5nZSA9ICI3LSB0byA5LXllYXItb2xkIGNoaWxkcmVuIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuX2FnZSA9IG1lYW4oZDJfNzkkYWdlLCBuYS5ybSA9IFQpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJfY29tcGFyZV9sYWJlbCA9ICJCZWV0bGUgdnMuIEdNIikKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnRhYmxlNS4yCmBgYAoKSW4gZmFjdCwgdGhpcyBpcyBleGFjdGx5IHdoYXQgSSBvYnNlcnZlIGFtb25nIHRoZSA3LSB0byA5LXllYXItb2xkIGNoaWxkcmVuIGluIHRoaXMgc3R1ZHkuIAoKSW4gbGluZSB3aXRoIGFuIGFkdWx0LWxpa2UgdW5kZXJzdGFuZGluZyBvZiB0aGUgYW5pbWF0ZS1pbmFuaW1hdGUgZGlzdGluY3Rpb24sIF9CT0RZXyBzY29yZXMgd2VyZSBnZW5lcmFsbHkgaGlnaGVyIGFtb25nIGNoaWxkcmVuIHdobyBhc3Nlc3NlZCB0aGUgYmVldGxlICh0aGUgYW5pbWF0ZSB0YXJnZXQgY2hhcmFjdGVyKSB0aGFuIGFtb25nIGNoaWxkcmVuIHdobyBhc3Nlc3NlZCB0aGUgcm9ib3QgKHRoZSBpbmFuaW1hdGUgdGFyZ2V0IGNoYXJhY3Rlcjsgc2VlIFRhYmxlIDUuMiwgIkJlZXRsZSB2cy4gR00iIHJvdyBmb3IgdGhlIEJPRFkgZG9tYWluKS4gV2l0aCBhZ2UsIGhvd2V2ZXIsIGNoaWxkcmVuJ3MgX0JPRFlfIHNjb3JlcyBnZW5lcmFsbHkgZGVjcmVhc2VkIChhbmQgVGFibGUgNS4yLCAiRXhhY3QgYWdlIiByb3cgZm9yIHRoZSBCT0RZIGRvbWFpbiksIGRyaXZlbiBieSBjaGFuZ2VzIGluIGNoaWxkcmVuJ3MgYXR0cmlidXRpb25zIG9mIEJPRFkgdG8gdGhlIHJvYm90LiBBcyBhIHJlc3VsdCwgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgYmVldGxlIGFuZCB0aGUgcm9ib3QgaW5jcmVhc2VkIG92ZXIgdGhlIGFnZSByYW5nZSAoc2VlIFRhYmxlIDUuMiwgIkludGVyYWN0aW9uIiByb3cgZm9yIHRoZSBCT0RZIGRvbWFpbiwgYW5kIEZpZ3VyZSA1LjMsIGxlZnRtb3N0IHBsb3QpLgoKTWVhbndoaWxlLCBjaGlsZHJlbidzIF9IRUFSVF8gc2NvcmVzIGRpZCBub3QgZGlmZmVyIHJlbGlhYmx5IGFjcm9zcyB0aGUgdHdvIHRhcmdldCBjaGFyYWN0ZXJzIGluIHRoaXMgc3R1ZHkgKHNlZSBUYWJsZSA1LjIsICJCZWV0bGUgdnMuIEdNIiByb3cgZm9yIHRoZSBIRUFSVCBkb21haW4p4oCUYnV0IHdpdGggYWdlLCBjaGlsZHJlbidzIF9IRUFSVF8gc2NvcmVzIGZvciBib3RoIGNoYXJhY3RlcnMgZ2VuZXJhbGx5IGRlY3JlYXNlZCAoYW5kIFRhYmxlIDUuMiwgIkV4YWN0IGFnZSIgYW5kICJJbnRlcmFjdGlvbiIgcm93cyBmb3IgdGhlIEhFQVJUIGRvbWFpbiwgYW5kIEZpZ3VyZSA1LjMsIGNlbnRlciBwbG90KS4KCkZpbmFsbHksIF9NSU5EXyBzY29yZXMgd2VyZSBnZW5lcmFsbHkgaGlnaGVyIGFtb25nIGNoaWxkcmVuIHdobyBhc3Nlc3NlZCB0aGUgcm9ib3QgKHRoZSBpbmFuaW1hdGUgdGFyZ2V0IGNoYXJhY3RlcikgdGhhbiBhbW9uZyBjaGlsZHJlbiB3aG8gYXNzZXNzZWQgdGhlIGJlZXRsZSAodGhlIGFuaW1hdGUgdGFyZ2V0IGNoYXJhY3Rlcjsgc2VlIFRhYmxlIDUuMiwgIkJlZXRsZSB2cy4gR00iIHJvdyBmb3IgdGhlIE1JTkQgZG9tYWluKS4gSW4gYWRkaXRpb24gdG8gdGhlIHByZWRpY3RlZCBhZ2UtcmVsYXRlZCBkaWZmZXJlbmNlcyBpbiB0aGUgQk9EWSBhbmQgSEVBUlQgZG9tYWlucywgY2hpbGRyZW4ncyBfTUlORF8gc2NvcmVzIGZvciBib3RoIGNoYXJhY3RlcnMgZ2VuZXJhbGx5IGluY3JlYXNlZCB3aXRoIGFnZSAoYW5kIFRhYmxlIDUuMiwgIkV4YWN0IGFnZSIgYW5kICJJbnRlcmFjdGlvbiIgcm93cyBmb3IgdGhlIE1JTkQgZG9tYWluLCBhbmQgRmlndXJlIDUuMywgcmlnaHRtb3N0IHBsb3QpLgoKIyMgRGlzY3Vzc2lvbgoKWFggX19JTlNFUlQgRElTQ1VTU0lPTl9fCgpPVVRMSU5FOgphZHVsdHM6IAogICAgLSBhbmltYXRlLWluYW5pbWF0ZSBkaXN0aW5jdGlvbiBzdHJvbmdlc3QgaW4gdGhlIEJPRFkgZG9tYWluCiAgICAtIG5laXRoZXIgZWRnZSBjYXNlIGdyYW50ZWQgbXVjaCBIRUFSVAogICAgLSBib3RoIGVkZ2UgY2FzZXMgZ3JhbnRlZCBmYWlyIGFtb3VudCBvZiBNSU5ECgpjaGlsZHJlbjoKLSBCT0RZOiAKICAgIC0gYW5pbWF0ZS1pbmFuaW1hdGUgZGlzdGluY3Rpb24gaW4gcGxhY2UKICAgIC0gYnV0IGdlbmVyYWwgZGVjcmVhc2VzLCBlc3BlY2lhbGx5IGZvciB0aGUgcm9ib3QgKGFuaW1hdGUtaW5hbmltYXRlIGRpc3RpbmN0aW9uIGJlY29tZXMgbW9yZSBjbGVhci9yb2J1c3QpCi0gSEVBUlQ6IGJpZ2dlc3QgYWdlIGRpZmZlcmVuY2VzCiAgICAtIGJvdGggZWRnZSBjYXNlcyBncmFudGVkIGZhaXIgYW1vdW50IG9mIEhFQVJUCiAgICAtIGJvdGggbW9yZSB0aGFuIGFkdWx0cwogICAgLSBkZWNyZWFzZXMgd2l0aCBhZ2UKLSBNSU5EOiAKICAgIC0gYm90aCBlZGdlIGNhc2VzIGdyYW50ZWQgZmFpciBhbW91bnQgb2YgTUlORAogICAgLSBpbmNyZWFzZXMgd2l0aCBhZ2UgKHRob3VnaCBubyByZWxpYWJsZSBncm91cCBkaWZmZXJlbmNlcykKCgojIFN0dWR5IDM6IENvbmNlcHR1YWwgY2hhbmdlIG92ZXIgZWFybHkgYW5kIG1pZGRsZSBjaGlsZGhvb2QgKDQtOXkpCgpTdHVkeSAzIGJ1aWxkcyBvbiB0aGUgaW52ZXN0aWdhdGlvbiBvZiBtaWRkbGUgY2hpbGRob29kICg3LTl5KSBpbml0aWF0ZWQgaW4gU3R1ZHkgMiBhbmQgZXh0ZW5kcyB0aGlzIGV4cGxvcmF0aW9uIG9mIGNvbmNlcHR1YWwgY2hhbmdlIGludG8gZWFybGllciBjaGlsZGhvb2QgKDQtNnkpLiBJbiB0aGlzIGNoYXB0ZXIsIEkgYWdhaW4gZm9jdXMgb24gd2hhdCB0aGlzIHN0dWR5IGNhbiByZXZlYWwgYWJvdXQgY2hhbmdlcyBpbiB0aGUgZGVwbG95bWVudCBvZiB0aGlzIGNvbmNlcHTigJRpLmUuLCB0aGUgYXR0cmlidXRpb24gb2YgQk9EWSwgSEVBUlQsIGFuZCBNSU5EIHRvIHZhcmlvdXMgYmVpbmdzIGluIHRoZSB3b3JsZOKAlG92ZXIgdGhlIGNvdXJzZSBvZiBlYXJseSBhbmQgbWlkZGxlIGNoaWxkaG9vZCAoNy05eSkuCgpUbyByZXZpZXcsIGluIFN0dWR5IDMsIGByIG5yb3coZDNfYWRfd2lkZSlgIFVTIGFkdWx0cywgYHIgbnJvdyhkM183OV93aWRlKWAgIm9sZGVyIiBjaGlsZHJlbiAoYHIgc3VtbWFyeShkM183OSRhZ2UpWyJNaW4uIl0gJT4lIHJvdW5kKDIpICU+JSBmb3JtYXQobnNtYWxsID0gMilgLWByIHN1bW1hcnkoZDNfNzkkYWdlKVsiTWF4LiJdICU+JSByb3VuZCgyKSAlPiUgZm9ybWF0KG5zbWFsbCA9IDIpYCB5ZWFyczsgbWVkaWFuOiBgciBzdW1tYXJ5KGQzXzc5JGFnZSlbIk1lZGlhbiJdICU+JSByb3VuZCgyKSAlPiUgZm9ybWF0KG5zbWFsbCA9IDIpYHkpLCBhbmQgYHIgbnJvdyhkM180Nl93aWRlKWAgInlvdW5nZXIiIGNoaWxkcmVuIChgciBzdW1tYXJ5KGQzXzQ2JGFnZSlbIk1pbi4iXSAlPiUgcm91bmQoMikgJT4lIGZvcm1hdChuc21hbGwgPSAyKWAtYHIgc3VtbWFyeShkM180NiRhZ2UpWyJNYXguIl0gJT4lIHJvdW5kKDIpICU+JSBmb3JtYXQobnNtYWxsID0gMilgIHllYXJzOyBtZWRpYW46IGByIHN1bW1hcnkoZDNfNDYkYWdlKVsiTWVkaWFuIl0gJT4lIHJvdW5kKDIpICU+JSBmb3JtYXQobnNtYWxsID0gMilgeSkgZWFjaCBhc3Nlc3NlZCBhIHNpbmdsZSB0YXJnZXQgY2hhcmFjdGVyIG9uIDIwIG1lbnRhbCBjYXBhY2l0aWVzLiBUaGlzIHN0dWR5IGVtcGxveWVkIHRoZSAiZGl2ZXJzZSBjaGFyYWN0ZXJzIiB2YXJpYW50IG9mIHRoZSBnZW5lcmFsIGFwcHJvYWNoLCB3aXRoIHBhcnRpY2lwYW50cyByYW5kb21seSBvciBwc2V1ZG8tcmFuZG9tbHkgYXNzaWduZWQgdG8gYXNzZXNzIG9uZSBvZiB0aGUgZm9sbG93aW5nIDkgY2hhcmFjdGVyczogYW4gZWxlcGhhbnQsIGEgZ29hdCwgYSBtb3VzZSwgYSBiaXJkLCBhIGJlZXRsZSwgYSB0ZWRkeSBiZWFyLCBhIGRvbGwsIGEgcm9ib3QsIG9yIGEgY29tcHV0ZXIuIChTZWUgQ2hhcHRlciBJSSBmb3IgZGV0YWlsZWQgbWV0aG9kcy4pCgojIyBTcGVjaWFsIG5vdGVzIG9uIGRhdGEgcHJvY2Vzc2luZyBhbmQgYW5hbHlzaXMKCkFzIGluIFN0dWR5IDIsIHRvIGZhY2lsaXRhdGUgY29tcGFyaXNvbiBiZXR3ZWVuIHRoZSB0aHJlZSBhZ2UgZ3JvdXBzIGluY2x1ZGVkIGluIFN0dWR5IDMsIEkgdXNlIGFkdWx0cycgX0JPRFlfLCBfSEVBUlRfLCBhbmQgX01JTkRfIHNjYWxlcyAoYXMgZGVzY3JpYmVkIGluIENoYXB0ZXIgSVYpIHRvIGFuYWx5emUgYm90aCBhZ2UgZ3JvdXBzLiBGb3IgYW5hbHlzZXMgdXNpbmcgc2NhbGVzIGRlcml2ZWQgZnJvbSBFRkEgb2YgY2hpbGRyZW4ncyBvd24gcmVzcG9uc2VzLCBzZWUgW1hYIEFwcGVuZGl4IENdLgoKIyMgUmVzdWx0cwoKYGBge3J9CmQzXzQ2NzlhZF9zY29yZWRfYWQgPC0gZnVsbF9qb2luKGQzX2FkX3Njb3JlZF9hZCwgZDNfNzlfc2NvcmVkX2FkKSAlPiUKICBmdWxsX2pvaW4oZDNfNDZfc2NvcmVkX2FkKSAlPiUKICBsZWZ0X2pvaW4oYW5pbV9sb29rdXApICU+JQogIG11dGF0ZShjaGFyYWN0ZXIgPSBmYWN0b3IoY2hhcmFjdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gbGV2ZWxzKGQzX2FkX3Njb3JlZF9hZCRjaGFyYWN0ZXIpKSwKICAgICAgICAgYWdlX2dyb3VwID0gZmFjdG9yKGFnZV9ncm91cCkpCgpjb250cmFzdHMoZDNfNDY3OWFkX3Njb3JlZF9hZCRjaGFyYWN0ZXIpIDwtIGNvbnRyYXN0c19zdW1fZHYwOQpjb250cmFzdHMoZDNfNDY3OWFkX3Njb3JlZF9hZCRmYWN0b3IpIDwtIGNvbnRyYXN0c19jbnQzX2ZhY3Rvcgpjb250cmFzdHMoZDNfNDY3OWFkX3Njb3JlZF9hZCRhbmltX2luYW4pIDwtIGNvbnRyYXN0c19zdW0yX2FuaW0KY29udHJhc3RzKGQzXzQ2NzlhZF9zY29yZWRfYWQkYWdlX2dyb3VwKSA8LSBjb250cmFzdHNfZHVtM19hZ2VncApgYGAKCiMjIyBDaGlsZHJlbiB2cy4gYWR1bHRzCgpgYGB7cn0KZDNfNDY3OWFkX21lYW5zIDwtIGQzXzQ2NzlhZF9zY29yZWRfYWQgJT4lCiAgZ3JvdXBfYnkoYWdlX2dyb3VwLCBhbmltX2luYW4sIGZhY3RvcikgJT4lCiAgbXVsdGlfYm9vdF9zdGFuZGFyZChjb2wgPSAic2NvcmUiLCBuYS5ybSA9IFQpICU+JQogIHVuZ3JvdXAoKQpgYGAKClNlZSBGaWd1cmUgNS40LCBwYW5lbCBBLCBmb3IgX0JPRFlfLCBfSEVBUlRfLCBhbmQgX01JTkRfIHNjb3JlcyBmb3IgZWFjaCBvZiB0aGUgbmluZSB0YXJnZXQgY2hhcmFjdGVycyBhbW9uZyB0aGUgeW91bmdlciBjaGlsZHJlbiAoNC02eSksIG9sZGVyIGNoaWxkcmVuICg3LTl5KSwgYW5kIGFkdWx0cyBpbiBTdHVkeSAzLCBhbmQgRmlndXJlIDUuNCwgcGFuZWwgQiwgZm9yIGEgdmlzdWFsaXphdGlvbiBvZiBzY29yZXMgd2l0aCB0YXJnZXQgY2hhcmFjdGVycyBncm91cGVkIGludG8gYW5pbWF0ZSBiZWluZ3MgKGVsZXBoYW50LCBnb2F0LCBtb3VzZSwgYmlyZCBiZWV0bGUpIHZzLiBpbmFuaW1hdGUgb2JqZWN0cyAodGVkZHkgYmVhciwgZG9sbCwgcm9ib3QsIGNvbXB1dGVyKS4gVG8gZmFjaWxpdGF0ZSBjb21wYXJpc29uIHdpdGggU3R1ZGllcyAyIGFuZCA0LCBJIHdpbGwgZm9jdXMgaGVyZSBvbiBhbmltYWN5IHN0YXR1cywgcmF0aGVyIHRoYW4gYW5hbHp5aW5nIGFsbCB0YXJnZXQgY2hhcmFjdGVycyBpbmRpdmlkdWFsbHkuCgpJbiB0aGUgYWdncmVnYXRlLCBhbGwgdGhyZWUgYWdlIGdyb3VwcyBzZWVtIHRvIGhhdmUgY29uc2lkZXJlZCB0aGUgYW5pbWF0ZSBiZWluZ3MgaW5jbHVkZWQgaW4gdGhpcyBzdHVkeSB0byBoYXZlIGEgcmVsYXRpdmVseSBoaWdoIGRlZ3JlZSBvZiBwaHlzaW9sb2dpY2FsIHNlbnNhdGlvbnMgKG1lYW4gX0JPRFlfIHNjb3JlIGFtb25nIGFkdWx0czogYHIgc2NvcmVfbWVhbl9wcmludF9mdW4oZDNfNDY3OWFkX21lYW5zLCAiQk9EWSIsICJhZHVsdHMiLCB3aGljaF9hbmltID0gImFuaW1hdGUiKWA7IGFtb25nIG9sZGVyIGNoaWxkcmVuOiBgciBzY29yZV9tZWFuX3ByaW50X2Z1bihkM180Njc5YWRfbWVhbnMsICJCT0RZIiwgImNoaWxkcmVuNzkiLCB3aGljaF9hbmltID0gImFuaW1hdGUiKWA7IGFtb25nIHlvdW5nZXIgY2hpbGRyZW46IGByIHNjb3JlX21lYW5fcHJpbnRfZnVuKGQzXzQ2NzlhZF9tZWFucywgIkJPRFkiLCAiY2hpbGRyZW40NiIsIHdoaWNoX2FuaW0gPSAiYW5pbWF0ZSIpYCksIGFuZCBhIG1pZGRsaW5nIGRlZ3JlZSBvZiBzb2NpYWwtZW1vdGlvbmFsIGFiaWxpdGllcyAobWVhbiBfSEVBUlRfIHNjb3JlIGFtb25nIGFkdWx0czogYHIgc2NvcmVfbWVhbl9wcmludF9mdW4oZDNfNDY3OWFkX21lYW5zLCAiSEVBUlQiLCAiYWR1bHRzIiwgd2hpY2hfYW5pbSA9ICJhbmltYXRlIilgOyBhbW9uZyBvbGRlciBjaGlsZHJlbjogYHIgc2NvcmVfbWVhbl9wcmludF9mdW4oZDNfNDY3OWFkX21lYW5zLCAiSEVBUlQiLCAiY2hpbGRyZW43OSIsIHdoaWNoX2FuaW0gPSAiYW5pbWF0ZSIpYDsgYW1vbmcgeW91bmdlciBjaGlsZHJlbjogYHIgc2NvcmVfbWVhbl9wcmludF9mdW4oZDNfNDY3OWFkX21lYW5zLCAiSEVBUlQiLCAiY2hpbGRyZW40NiIsIHdoaWNoX2FuaW0gPSAiYW5pbWF0ZSIpYCkuIEFzc2Vzc21lbnRzIG9mIGFuaW1hdGUgYmVpbmdzJyBhYmlsaXRpZXMgaW4gdGhlIE1JTkQgZG9tYWluIGFwcGVhciB0byBoYXZlIHZhcmllZCBtb3JlIGJ5IGFnZSBncm91cDogV2hpbGUgYWR1bHRzIHRlbmRlZCB0byBncmFudCBhbmltYXRlIGJlaW5ncyBhIGhpZ2ggZGVncmVlIG9mIHBlcmNlcHR1YWwtY29nbml0aXZlIGFiaWxpdGllcyAobWVhbiBfTUlORF8gc2NvcmUgYW1vbmcgYWR1bHRzOiBgciBzY29yZV9tZWFuX3ByaW50X2Z1bihkM180Njc5YWRfbWVhbnMsICJNSU5EIiwgImFkdWx0cyIsIHdoaWNoX2FuaW0gPSAiYW5pbWF0ZSIpYCksIHlvdW5nZXIgY2hpbGRyZW4ncyBfTUlORF8gc2NvcmVzIHRlbmRlZCB0byBob3ZlciBhcm91bmQgdGhlIG1pZHBvaW50IG9mIHRoZSBzY2FsZSAobWVhbjogYHIgc2NvcmVfbWVhbl9wcmludF9mdW4oZDNfNDY3OWFkX21lYW5zLCAiTUlORCIsICJjaGlsZHJlbjQ2Iiwgd2hpY2hfYW5pbSA9ICJhbmltYXRlIilgKSwgd2l0aCBvbGRlciBjaGlsZHJlbiBmYWxsaW5nIGluIGJldHdlZW4gKG1lYW46IGByIHNjb3JlX21lYW5fcHJpbnRfZnVuKGQzXzQ2NzlhZF9tZWFucywgIk1JTkQiLCAiY2hpbGRyZW43OSIsIHdoaWNoX2FuaW0gPSAiYW5pbWF0ZSIpYCkuCgpGb3IgdGhlIGluYW5pbWF0ZSBiZWluZ3MgaW5jbHVkZWQgaW4gdGhpcyBzdHVkeSwgdGhlcmUgd2FzIGEgaGlnaCBkZWdyZWUgb2YgY29uc2Vuc3VzIGFtb25nIGFkdWx0cyB0aGF0IHN1Y2ggZW50aXRpZXMgaGFkIHZpcnR1YWxseSBubyBwaHlzaW9sb2dpY2FsIG9yIHNvY2lhbC1lbW90aW9uYWwgYWJpbGl0aWVzIChtZWFuIF9CT0RZXyBzY29yZTogYHIgc2NvcmVfbWVhbl9wcmludF9mdW4oZDNfNDY3OWFkX21lYW5zLCAiQk9EWSIsICJhZHVsdHMiLCB3aGljaF9hbmltID0gImluYW5pbWF0ZSIpYDsgbWVhbiBfSEVBUlRfIHNjb3JlOiBgciBzY29yZV9tZWFuX3ByaW50X2Z1bihkM180Njc5YWRfbWVhbnMsICJIRUFSVCIsICJhZHVsdHMiLCB3aGljaF9hbmltID0gImluYW5pbWF0ZSIpYCkuIEluIGNvbnRyYXN0LCBib3RoIGdyb3VwcyBvZiBjaGlsZHJlbiwgaW4gdGhlIGFnZ3JlZ2F0ZSwgZ3JhbnRlZCBsb3cgdG8gbW9kZXJhdGUgYWJpbGl0aWVzIHRvIGluYW5pbWF0ZSBiZWluZ3MgaW4gYm90aCB0aGUgQk9EWSBkb21haW4gKG1lYW4gX0JPRFlfIHNjb3JlIGFtb25nIG9sZGVyIGNoaWxkcmVuOiBgciBzY29yZV9tZWFuX3ByaW50X2Z1bihkM180Njc5YWRfbWVhbnMsICJCT0RZIiwgImNoaWxkcmVuNzkiLCB3aGljaF9hbmltID0gImluYW5pbWF0ZSIpYDsgYW1vbmcgeW91bmdlciBjaGlsZHJlbjogYHIgc2NvcmVfbWVhbl9wcmludF9mdW4oZDNfNDY3OWFkX21lYW5zLCAiQk9EWSIsICJjaGlsZHJlbjQ2Iiwgd2hpY2hfYW5pbSA9ICJpbmFuaW1hdGUiKWApIGFuZCB0aGUgSEVBUlQgZG9tYWluIChtZWFuIF9IRUFSVF8gc2NvcmUgYW1vbmcgb2xkZXIgY2hpbGRyZW46IGByIHNjb3JlX21lYW5fcHJpbnRfZnVuKGQzXzQ2NzlhZF9tZWFucywgIkhFQVJUIiwgImNoaWxkcmVuNzkiLCB3aGljaF9hbmltID0gImluYW5pbWF0ZSIpYDsgYW1vbmcgeW91bmdlciBjaGlsZHJlbjogYHIgc2NvcmVfbWVhbl9wcmludF9mdW4oZDNfNDY3OWFkX21lYW5zLCAiSEVBUlQiLCAiY2hpbGRyZW40NiIsIHdoaWNoX2FuaW0gPSAiaW5hbmltYXRlIilgKS4gQWxsIHRocmVlIGFnZSBncm91cHMsIGluIHRoZSBhZ2dyZWdhdGUsIGdyYW50ZWQgbWlkZGxpbmcgcGVyY2VwdHVhbC1jb2duaXRpdmUgYWJpbGl0aWVzIHRvIHRoZXNlIGluYW5pbWF0ZSBjaGFyYWN0ZXJzICh3aGljaCBpbmNsdWRlZCB0d28gImludGVsbGlnZW50IiB0ZWNobm9sb2dpZXM7IG1lYW4gX01JTkRfIHNjb3JlIGFtb25nIGFkdWx0czogYHIgc2NvcmVfbWVhbl9wcmludF9mdW4oZDNfNDY3OWFkX21lYW5zLCAiTUlORCIsICJhZHVsdHMiLCB3aGljaF9hbmltID0gImluYW5pbWF0ZSIpYDsgYW1vbmcgb2xkZXIgY2hpbGRyZW46IGByIHNjb3JlX21lYW5fcHJpbnRfZnVuKGQzXzQ2NzlhZF9tZWFucywgIk1JTkQiLCAiY2hpbGRyZW43OSIsIHdoaWNoX2FuaW0gPSAiaW5hbmltYXRlIilgOyBhbW9uZyB5b3VuZ2VyIGNoaWxkcmVuOiBgciBzY29yZV9tZWFuX3ByaW50X2Z1bihkM180Njc5YWRfbWVhbnMsICJNSU5EIiwgImNoaWxkcmVuNDYiLCB3aGljaF9hbmltID0gImluYW5pbWF0ZSIpYCkuCgpgYGB7cn0KZmlndXJlNS40X3Bsb3RzIDwtIGNoYXJhY3Rlcl9tdWx0aXBsb3RfYWdlKAogIGRmX3Njb3JlZCA9IGZ1bGxfam9pbihkM19hZF9zY29yZWRfYWQsIGQzXzQ2X3Njb3JlZF9hZCkgJT4lCiAgICBmdWxsX2pvaW4oZDNfNzlfc2NvcmVkX2FkKSwgCiAgc2hvd19hbmltX2J5X3N1YmogPSBULAogIGFnZV9sZXZlbHMgPSBjKCJjaGlsZHJlbjQ2IiwgImNoaWxkcmVuNzkiLCAiYWR1bHRzIiksCiAgYWdlX2xhYmVscyA9IGMoIkNoaWxkcmVuLCA0LTZ5IiwgIkNoaWxkcmVuLCA3LTl5IiwgIkFkdWx0cyIpLAogIGppdHRlcl93aWQgPSAxLjUsCiAgcGxvdF9tYXJnX3VwcGVyID0gLTcwLCBheGlzX2hlaWdodCA9IDAuMTEpCmBgYAoKYGBge3J9CmZpZ3VyZTUuNF9wbG90c19jYXAgPC0gYWRkX3N1YihmaWd1cmU1LjRfcGxvdHMsIHN0cl93cmFwKCJGaWd1cmUgNS40OiBBdHRyaWJ1dGlvbnMgb2YgQk9EWSwgSEVBUlQsIGFuZCBNSU5EIGFtb25nIHlvdW5nZXIgY2hpbGRyZW4gKDQtNnkpLCBvbGRlciBjaGlsZHJlbiAoNy05eSksIGFuZCBhZHVsdHMgaW4gU3R1ZHkgMy4gRm9yIGVhY2ggY29uY2VwdHVhbCB1bml0LCBzY29yZXMgY291bGQgcmFuZ2UgZnJvbSAwLTEuIFBsb3RzIGluY2x1ZGUgKEEpIHNjb3JlcyBieSB0YXJnZXQgY2hhcmFjdGVyLCAoQikgYW5pbWFjeSBzdGF0dXMsIGFuZCAoQykgZGlzdHJpYnV0aW9ucyBvZiBzY29yZXMuIEluZGl2aWR1YWwgcGFydGljaXBhbnRzIGFyZSBwbG90dGVkIGFzIHNtYWxsLCB0cmFuc2x1Y2VudCBjaXJjbGVzLCBhbmQgbWVhbiBzY29yZXMgYnkgY2hhcmFjdGVyIGFyZSBwbG90dGVkIGFzIGxhcmdlciwgc29saWQgZGlhbW9uZHMuIEVycm9yIGJhcnMgYXJlIDk1JSBib290c3RyYXBwZWQgY29uZmlkZW5jZSBpbnRlcnZhbHMuIiwgMjMwKSwgeCA9IDAsIGhqdXN0ID0gMCkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFQsIGZpZy53aWR0aCA9IDEwLCBmaWcuYXNwID0gMC40fQpnZ2RyYXcoZmlndXJlNS40X3Bsb3RzX2NhcCkKYGBgCgpgYGB7cn0KIyByX2QzX2RldmdwX0JPRFkgPC0gYnJtKHNjb3JlIH4gYW5pbV9pbmFuICogYWdlX2dyb3VwLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGQzXzQ2NzlhZF9zY29yZWRfYWQgJT4lCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihmYWN0b3IgPT0gIkJPRFkiKSwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVzID0gNCwgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5KSkKIyAKIyBzYXZlUkRTKHJfZDNfZGV2Z3BfQk9EWSwgIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDNfZGV2Z3BfQk9EWSIpCgpyX2QzX2RldmdwX0JPRFkgPC0gcmVhZFJEUygiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kM19kZXZncF9CT0RZIikKCnN1bW1hcnkocl9kM19kZXZncF9CT0RZKQpgYGAKCmBgYHtyfQojIHJfZDNfZGV2Z3BfSEVBUlQgPC0gYnJtKHNjb3JlIH4gYW5pbV9pbmFuICogYWdlX2dyb3VwLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGQzXzQ2NzlhZF9zY29yZWRfYWQgJT4lCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihmYWN0b3IgPT0gIkhFQVJUIiksCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OSkpCiMgCiMgc2F2ZVJEUyhyX2QzX2RldmdwX0hFQVJULCAiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kM19kZXZncF9IRUFSVCIpCgpyX2QzX2RldmdwX0hFQVJUIDwtIHJlYWRSRFMoIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDNfZGV2Z3BfSEVBUlQiKQoKc3VtbWFyeShyX2QzX2RldmdwX0hFQVJUKQpgYGAKCmBgYHtyfQojIHJfZDNfZGV2Z3BfTUlORCA8LSBicm0oc2NvcmUgfiBhbmltX2luYW4gKiBhZ2VfZ3JvdXAsCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZDNfNDY3OWFkX3Njb3JlZF9hZCAlPiUKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKGZhY3RvciA9PSAiTUlORCIpLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTkpKQojIAojIHNhdmVSRFMocl9kM19kZXZncF9NSU5ELCAiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kM19kZXZncF9NSU5EIikKCnJfZDNfZGV2Z3BfTUlORCA8LSByZWFkUkRTKCIuL3N0b3JlZC9icm1zX21vZGVscy9yX2QzX2RldmdwX01JTkQiKQoKc3VtbWFyeShyX2QzX2RldmdwX01JTkQpCmBgYAoKYGBge3J9CnJlZ3RhYl9kM19kZXZncCA8LSByZWd0YWJfZGV2Z3BfZnVuKAogIHJlZ19ib2R5ID0gcl9kM19kZXZncF9CT0RZLCAKICByZWdfaGVhcnQgPSByX2QzX2RldmdwX0hFQVJULAogIHJlZ19taW5kID0gcl9kM19kZXZncF9NSU5ELAogIGFnZV9sZXZlbHMgPSBjKCJhZ2VfZ3JvdXBfb2xkIiwgImFnZV9ncm91cF95bmciKSwgCiAgYWdlX2xhYmVscyA9IGMoIk9sZGVyIGNoaWxkcmVuICg3LTl5KSB2cy4gYWR1bHRzIiwKICAgICAgICAgICAgICAgICAiWW91bmdlciBjaGlsZHJlbiAoNC02eSkgdnMuIGFkdWx0cyIpKQpgYGAKCmBgYHtyfQp0YWJsZTUuMyA8LSBkZXZncF90YWJsZV9mdW4ocmVndGFiX2RldmdwID0gcmVndGFiX2QzX2RldmdwLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5fY2hhcmFjdGVycyA9IDIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfbmFtZSA9ICJUYWJsZSA1LjMiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWR5X25hbWUgPSAiU3R1ZHkgMyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdlX2dyb3VwID0gIjQtIHRvIDkteWVhci1vbGQgY2hpbGRyZW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbl9hZ2VfZ3JvdXBzID0gMiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyX2NvbXBhcmVfbGFiZWwgPSAiQW5pbWF0ZSBjaGFyYWN0ZXJzIHZzLiBHTSIpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQp0YWJsZTUuMwpgYGAKCkEgc2VyaWVzIG9mIEJheWVzaWFuIHJlZ3Jlc3Npb24gYW5hbHlzZXMgY29uZmlybWVkIHRoZXNlIGdlbmVyYWwgaW1wcmVzc2lvbnMgb2YgZGlmZmVyZW5jZXMgYWNyb3NzIGFnZSBncm91cHMuIAoKTmVpdGhlciBvbGRlciBub3IgeW91bmdlciBjaGlsZHJlbidzIF9CT0RZXyBzY29yZXMgd2VyZSBnZW5lcmFsbHkgaGlnaGVyIHRoYW4gYWR1bHRzJyAoc2VlIFRhYmxlIDUuMywgIk9sZGVyIGNoaWxkcmVuIHZzLiBhZHVsdHMiIGFuZCAiWW91bmdlciBjaGlsZHJlbiB2cy4gYWR1bHRzIiByb3dzIGZvciB0aGUgQk9EWSBkb21haW4pLCBidXQgaW4gYm90aCBncm91cHMgb2YgY2hpbGRyZW4gdGhlIGRpZmZlcmVuY2UgaW4gX0JPRFlfIHNjb3JlcyBiZXR3ZWVuIGFuaW1hdGUgdnMuIGluYW5pbWF0ZSBjaGFyYWN0ZXJzIHdhcyBhdHRlbnVhdGVkLCByZWxhdGl2ZSB0byBhZHVsdHMgKHNlZSBUYWJsZSA1LjMsICJJbnRlcmFjdGlvbiIgcm93IGZvciB0aGUgQk9EWSBkb21haW4pLiBNZWFud2hpbGUsIGluIHRoZSBfSEVBUlRfIGRvbWFpbiwgYm90aCBvbGRlciBhbmQgeW91bmdlciBjaGlsZHJlbidzIF9IRUFSVF8gc2NvcmVzIHdlcmUgZ2VuZXJhbGx5IGhpZ2hlciB0aGFuIGFkdWx0cycgKHNlZSBUYWJsZSA1LjMsICJDaGlsZHJlbiB2cy4gYWR1bHRzIiByb3cgZm9yIHRoZSBIRUFSVCBkb21haW4sIGFuZCBGaWd1cmUgNS40LCBtaWRkbGUgcm93KSwgYnV0IHRoaXMgZGlmZmVyZW5jZSBkaWQgbm90IHZhcnkgc3Vic3RhbnRpYWxseSBhY3Jvc3MgdGFyZ2V0IGNoYXJhY3RlcnMgKHNlZSBUYWJsZSA1LjMsICJJbnRlcmFjdGlvbiIgcm93IGZvciB0aGUgQk9EWSBkb21haW4pLiBGaW5hbGx5LCBpbiB0aGUgX01JTkRfIGRvbWFpbiwgeW91bmdlciBjaGlsZHJlbidzIChidXQgbm90IG9sZGVyIGNoaWxkcmVuJ3MpIF9NSU5EXyBzY29yZXMgd2VyZSBzdWJzdGFudGlhbGx5IGxvd2VyIHRoYW4gYWR1bHRzJyAoc2VlIFRhYmxlIDUuMywgIk9sZGVyIGNoaWxkcmVuIHZzLiBhZHVsdHMiIGFuZCAiWW91bmdlciBjaGlsZHJlbiB2cy4gYWR1bHRzIiByb3dzIGZvciB0aGUgTUlORCBkb21haW4pLiBJbiBhZGRpdGlvbiwgaW4gYm90aCBncm91cHMgb2YgY2hpbGRyZW4gdGhlIGRpZmZlcmVuY2UgaW4gX01JTkRfIHNjb3JlcyBiZXR3ZWVuIGFuaW1hdGUgdnMuIGluYW5pbWF0ZSBjaGFyYWN0ZXJzIHdhcyBhdHRlbnVhdGVkLCByZWxhdGl2ZSB0byBhZHVsdHMgKHNlZSBUYWJsZSA1LjMsICJJbnRlcmFjdGlvbiIgcm93IGZvciB0aGUgTUlORCBkb21haW4pLgoKIyMjIEFnZS1yZWxhdGVkIGRpZmZlcmVuY2VzIGJldHdlZW4gNC05eQoKSGVyZSwgSSBzaGlmdCBmcm9tIHRoZSAic25hcHNob3QiIGFnZSBncm9wdSBjb21wYXJpc29ucyBvZiB0aGUgcHJldmlvdXMgc2VjdGlvbiB0byBhbiBleGFtaW5hdGlvbiBvZiBhZ2UtcmVsYXRlZCBkaWZmZXJlbmNlcyB3aXRoaW4gdGhlIGNoaWxkIHNhbXBsZTogSG93IG1pZ2h0IGNoaWxkcmVuJ3MgYXR0cmlidXRpb25zIHRvIHRoZXNlIHRhcmdldCBjaGFyYWN0ZXJzIGNoYW5nZSBiZXR3ZWVuIDQtOXkgb2YgYWdlPyAKCkFzIEkgYXJndWVkIGZvciBTdHVkeSAyLCBpZiB0aGUgYWdlIGdyb3VwIGRpZmZlcmVuY2VzIGp1c3QgZGVzY3JpYmVkIHJlZmxlY3QgX2RldmVsb3BtZW50YWxfIGRpZmZlcmVuY2VzLCBJIHdvdWxkIGV4cGVjdCB0aGF0LCB3aXRoIGluY3JlYXNpbmcgYWdlLCBjaGlsZHJlbidzIHJlc3BvbnNlcyB3b3VsZCBiZWNvbWUgaW5jcmVhc2luZ2x5IGFkdWx0LWxpa2UuIEluIHRoaXMgY2FzZSwgdGhpcyB3b3VsZCBtZWFuIHRoYXQgYWdlIHdvdWxkIGJlIGFzc29jaWF0ZWQgd2l0aCBpbmNyZWFzZWQgZGlmZmVyZW50YXRpb24gb2YgYW5pbWF0ZSB2cy4gaW5hbmltYXRlIGNoYXJhY3RlcnMgaW4gY2hpbGRyZW4ncyBfQk9EWV8gc2NvcmVzOyBsb3dlciBfSEVBUlRfIHNjb3JlcyAocmVnYXJkbGVzcyBvZiB0YXJnZXQgY2hhcmFjdGVyKTsgYW5kIGhpZ2hlciBfTUlORF8gc2NvcmVzLCBwYXJ0aWN1bGFybHkgZm9yIGFuaW1hdGUgYmVpbmdzLgoKYGBge3J9CnBsb3RzX2QzX2Rldl9jaGFyIDwtIGNoYXJhY3Rlcl9kZXZwbG90KAogIGRmX3Njb3JlZF9hZCA9IGQzX2FkX3Njb3JlZF9hZCwgCiAgZGZfc2NvcmVkX2NoID0gZnVsbF9qb2luKGQzXzc5X3Njb3JlZF9hZCAlPiUgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXV0YXRlKHN1YmlkID0gcGFzdGUwKHN1YmlkLCAiXzc5IikpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBkM180Nl9zY29yZWRfYWQgJT4lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXV0YXRlKHN1YmlkID0gcGFzdGUwKHN1YmlkLCAiXzQ2IikpKSwgCiAgZGZfYWdlID0gZnVsbF9qb2luKGQzXzc5ICU+JQogICAgICAgICAgICAgICAgICAgICAgIG11dGF0ZShzdWJpZCA9IHBhc3RlMChzdWJpZCwgIl83OSIpKSwKICAgICAgICAgICAgICAgICAgICAgZDNfNDYgJT4lCiAgICAgICAgICAgICAgICAgICAgICAgbXV0YXRlKHN1YmlkID0gcGFzdGUwKHN1YmlkLCAiXzQ2IikpKSkKYGBgCgpgYGB7cn0KcGxvdHNfZDNfZGV2X2FuaW0gPC0gY2hhcmFjdGVyX2RldnBsb3QoCiAgZGZfc2NvcmVkX2FkID0gZDNfYWRfc2NvcmVkX2FkICU+JQogICAgbGVmdF9qb2luKGFuaW1fbG9va3VwKSAlPiUKICAgIG11dGF0ZShjaGFyYWN0ZXIgPSBhbmltX2luYW4pLCAKICBkZl9zY29yZWRfY2ggPSBmdWxsX2pvaW4oZDNfNzlfc2NvcmVkX2FkICU+JSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXRhdGUoc3ViaWQgPSBwYXN0ZTAoc3ViaWQsICJfNzkiKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGQzXzQ2X3Njb3JlZF9hZCAlPiUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXRhdGUoc3ViaWQgPSBwYXN0ZTAoc3ViaWQsICJfNDYiKSkpICU+JQogICAgbGVmdF9qb2luKGFuaW1fbG9va3VwKSAlPiUKICAgIG11dGF0ZShjaGFyYWN0ZXIgPSBhbmltX2luYW4pLCAKICBkZl9hZ2UgPSBmdWxsX2pvaW4oZDNfNzkgJT4lCiAgICAgICAgICAgICAgICAgICAgICAgbXV0YXRlKHN1YmlkID0gcGFzdGUwKHN1YmlkLCAiXzc5IikpLAogICAgICAgICAgICAgICAgICAgICBkM180NiAlPiUKICAgICAgICAgICAgICAgICAgICAgICBtdXRhdGUoc3ViaWQgPSBwYXN0ZTAoc3ViaWQsICJfNDYiKSkpKQpgYGAKCmBgYHtyfQpmaWd1cmU1LjVfY2hhciA8LSBwbG90c19kM19kZXZfY2hhciArCiAgbGFicyh0aXRsZSA9ICJTdHVkeSAzOiBDaGlsZHJlbiwgNC05eSAoYnkgdGFyZ2V0IGNoYXJhY3RlcikiKQoKZmlndXJlNS41X2FuaW0gPC0gcGxvdHNfZDNfZGV2X2FuaW0gKwogIGxhYnModGl0bGUgPSAiU3R1ZHkgMzogQ2hpbGRyZW4sIDQtOXkgKGJ5IGFuaW1hY3kgc3RhdHVzKSIpICsKICBzY2FsZV9jb2xvcl9tYW51YWwoIkFuaW1hY3kgc3RhdHVzIiwgdmFsdWVzID0gY29sb3JzQUksCiAgICAgICAgICAgICAgICAgICAgIGd1aWRlID0gZ3VpZGVfbGVnZW5kKGRpcmVjdGlvbiA9ICJob3Jpem9udGFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcnJpZGUuYWVzID0gbGlzdChhbHBoYSA9IDEpKSkgKwogIHNjYWxlX2ZpbGxfbWFudWFsKCJBbmltYWN5IHN0YXR1cyIsIHZhbHVlcyA9IGNvbG9yc0FJLAogICAgICAgICAgICAgICAgICAgIGd1aWRlID0gZ3VpZGVfbGVnZW5kKGRpcmVjdGlvbiA9ICJob3Jpem9udGFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVycmlkZS5hZXMgPSBsaXN0KGFscGhhID0gMSkpKQoKZmlndXJlNS41X3Bsb3RzIDwtIHBsb3RfZ3JpZChmaWd1cmU1LjVfY2hhciwgZmlndXJlNS41X2FuaW0sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jb2wgPSAxLCBsYWJlbHMgPSAiQVVUTyIpCmBgYAoKYGBge3J9CmZpZ3VyZTUuNV9wbG90c19jYXAgPC0gYWRkX3N1YihmaWd1cmU1LjVfcGxvdHMsIHN0cl93cmFwKCJGaWd1cmUgNS41OiBDaGFuZ2VzIGluIGF0dHJpYnV0aW9ucyBvZiBCT0RZLCBIRUFSVCwgYW5kIE1JTkQgYW1vbmcgNC0gdG8gOS15ZWFyLW9sZCBjaGlsZHJlbiBpbiBTdHVkeSAzLiBGb3IgZWFjaCBjb25jZXB0dWFsIHVuaXQsIHNjb3JlcyBjb3VsZCByYW5nZSBmcm9tIDAtMS4gSW5kaXZpZHVhbCBjaGlsZHJlbiBhcmUgcGxvdHRlZCBhcyBzbWFsbCwgdHJhbnNsdWNlbnQgY2lyY2xlczsgbWVhbiBzY29yZXMgYW1vbmcgYWR1bHRzIGFyZSBwbG90dGVkIGFzIGxhcmdlciwgc29saWQgZGlhbW9uZHMuIEVycm9yIGJhcnMgYXJlIDk1JSBib290c3RyYXBwZWQgY29uZmlkZW5jZSBpbnRlcnZhbHMuIExpbmVzIGNvcnJlc3BvbmQgdG8gc2ltcGxlIGxpbmVhciByZWdyZXNzaW9ucyAoZm9ybXVsYTogc2NvcmUgfiBhZ2UpLiIsIDExMCksIHggPSAwLCBoanVzdCA9IDApCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBULCBmaWcud2lkdGggPSA1LCBmaWcuYXNwID0gMX0KZ2dkcmF3KGZpZ3VyZTUuNV9wbG90c19jYXApCmBgYAoKYGBge3J9CmQzXzQ2Nzlfc2NvcmVkX2FkIDwtIGZ1bGxfam9pbihkM183OV9zY29yZWRfYWQgJT4lIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXRhdGUoc3ViaWQgPSBwYXN0ZTAoc3ViaWQsICJfNzkiKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkM180Nl9zY29yZWRfYWQgJT4lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11dGF0ZShzdWJpZCA9IHBhc3RlMChzdWJpZCwgIl80NiIpKSkgJT4lCiAgbGVmdF9qb2luKGZ1bGxfam9pbihkM183OSAlPiUgbXV0YXRlKHN1YmlkID0gcGFzdGUwKHN1YmlkLCAiXzc5IikpLAogICAgICAgICAgICAgICAgICAgICAgZDNfNDYgJT4lIG11dGF0ZShzdWJpZCA9IHBhc3RlMChzdWJpZCwgIl80NiIpKSkgJT4lCiAgICAgICAgICAgICAgZGlzdGluY3Qoc3ViaWQsIGFnZSkpICU+JQogIGxlZnRfam9pbihhbmltX2xvb2t1cCkgJT4lCiAgZmlsdGVyKCFpcy5uYShhZ2UpKSAlPiUKICBtdXRhdGUoY2hhcmFjdGVyID0gZmFjdG9yKGNoYXJhY3RlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGxldmVscyhkM19hZF9zY29yZWRfYWQkY2hhcmFjdGVyKSksCiAgICAgICAgIGFnZV9jZW50ZXJlZCA9IHNjYWxlKGFnZSwgc2NhbGUgPSBGKSkKCmNvbnRyYXN0cyhkM180Njc5X3Njb3JlZF9hZCRjaGFyYWN0ZXIpIDwtIGNvbnRyYXN0c19zdW1fZHYwOQpjb250cmFzdHMoZDNfNDY3OV9zY29yZWRfYWQkZmFjdG9yKSA8LSBjb250cmFzdHNfY250M19mYWN0b3IKY29udHJhc3RzKGQzXzQ2Nzlfc2NvcmVkX2FkJGFuaW1faW5hbikgPC0gY29udHJhc3RzX3N1bTJfYW5pbQpgYGAKCmBgYHtyfQojIHJfZDNfZGV2c2NvcmVfQk9EWSA8LSBicm0oc2NvcmUgfiBhbmltX2luYW4gKiBhZ2VfY2VudGVyZWQgKwojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSB8IGNoYXJhY3RlciksCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZDNfNDY3OV9zY29yZWRfYWQgJT4lCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihmYWN0b3IgPT0gIkJPRFkiKSwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVzID0gNCwgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5KSkKIyAKIyBzYXZlUkRTKHJfZDNfZGV2c2NvcmVfQk9EWSwgIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDNfZGV2c2NvcmVfQk9EWSIpCgpyX2QzX2RldnNjb3JlX0JPRFkgPC0gcmVhZFJEUygiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kM19kZXZzY29yZV9CT0RZIikKCnN1bW1hcnkocl9kM19kZXZzY29yZV9CT0RZKQpgYGAKCmBgYHtyfQojIHJfZDNfZGV2c2NvcmVfSEVBUlQgPC0gYnJtKHNjb3JlIH4gYW5pbV9pbmFuICogYWdlX2NlbnRlcmVkICsKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgfCBjaGFyYWN0ZXIpLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGQzXzQ2Nzlfc2NvcmVkX2FkICU+JQojICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoZmFjdG9yID09ICJIRUFSVCIpLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTkpKQojIAojIHNhdmVSRFMocl9kM19kZXZzY29yZV9IRUFSVCwgIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDNfZGV2c2NvcmVfSEVBUlQiKQoKcl9kM19kZXZzY29yZV9IRUFSVCA8LSByZWFkUkRTKCIuL3N0b3JlZC9icm1zX21vZGVscy9yX2QzX2RldnNjb3JlX0hFQVJUIikKCnN1bW1hcnkocl9kM19kZXZzY29yZV9IRUFSVCkKYGBgCgpgYGB7cn0KIyByX2QzX2RldnNjb3JlX01JTkQgPC0gYnJtKHNjb3JlIH4gYW5pbV9pbmFuICogYWdlX2NlbnRlcmVkICsKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgfCBjaGFyYWN0ZXIpLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGQzXzQ2Nzlfc2NvcmVkX2FkICU+JQojICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoZmFjdG9yID09ICJNSU5EIiksCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OSkpCiMgCiMgc2F2ZVJEUyhyX2QzX2RldnNjb3JlX01JTkQsICIuL3N0b3JlZC9icm1zX21vZGVscy9yX2QzX2RldnNjb3JlX01JTkQiKQoKcl9kM19kZXZzY29yZV9NSU5EIDwtIHJlYWRSRFMoIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDNfZGV2c2NvcmVfTUlORCIpCgpzdW1tYXJ5KHJfZDNfZGV2c2NvcmVfTUlORCkKYGBgCgpgYGB7cn0KcmVndGFiX2QzX2RldnNjb3JlIDwtIHJlZ3RhYl9kZXZzY29yZV9mdW4ocmVnX2JvZHkgPSByX2QzX2RldnNjb3JlX0JPRFksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19oZWFydCA9IHJfZDNfZGV2c2NvcmVfSEVBUlQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19taW5kID0gcl9kM19kZXZzY29yZV9NSU5EKQpgYGAKCmBgYHtyfQp0YWJsZTUuNCA8LSBkZXZzY29yZV90YWJsZV9mdW4ocmVndGFiX2RldnNjb3JlID0gcmVndGFiX2QzX2RldnNjb3JlLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5fY2hhcmFjdGVycyA9IDksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfbmFtZSA9ICJUYWJsZSA1LjQiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWR5X25hbWUgPSAiU3R1ZHkgMyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdlX3JhbmdlID0gIjQtIHRvIDkteWVhci1vbGQgY2hpbGRyZW4iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYW5fYWdlID0gbWVhbihkM180Njc5X3Njb3JlZF9hZCRhZ2UsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hLnJtID0gVCksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcl9jb21wYXJlX2xhYmVsID0gIkFuaW1hdGUgY2hhcmFjdGVycyB2cy4gR00iKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0KdGFibGU1LjQKYGBgCgpTb21lLCBidXQgbm90IGFsbCwgb2YgdGhlc2UgcHJlZGljdGlvbnMgd2VyZSBib3JuIG91dCBhbW9uZyB0aGUgNC0gdG8gOS15ZWFyLW9sZCBjaGlsZHJlbiBpbiB0aGlzIHN0dWR5LiAKCkFnZS1yZWxhdGVkIGRpZmZlcmVuY2VzIGluIHRoZSBCT0RZIGRvbWFpbiBjb25mb3JtZWQgdG8gdGhlIGRldmVsb3BtZW50YWwgc3Rvcnkgc3VnZ2VzdGVkIGJ5IHRoZSBncm91cCBkaWZmZXJlbmNlcyBpbiB0aGUgcHJldmlvdXMgc2VjdGlvbjogX0JPRFlfIHNjb3JlcyB3ZXJlIGdlbmVyYWxseSBoaWdoZXIgYW1vbmcgY2hpbGRyZW4gd2hvIGFzc2Vzc2VkIG9uZSBvZiB0aGUgYW5pbWF0ZSB0YXJnZXQgY2hhcmFjdGVycyAoZWxlcGhhbnQsIGdvYXQsIG1vdXNlLCBiaXJkLCBvciBiZWV0bGUpIHRoYW4gYW1vbmcgY2hpbGRyZW4gd2hvIGFzc2Vzc2VkIG9uZSBvZiB0aGUgaW5hbmltYXRlIHRhcmdldCBjaGFyYWN0ZXJzICh0ZWRkeSBiZWFyLCBkb2xsLCByb2JvdCwgb3IgY29tcHV0ZXI7IHNlZSBUYWJsZSA1LjQsICJBbmltYXRlIGNoYXJhY3RlcnMgdnMuIEdNIiByb3cgZm9yIHRoZSBCT0RZIGRvbWFpbiksIGFuZCB0aGlzIGRpZmZlcmVuY2UgaW5jcmVhc2VkIHdpdGggYWdlIChzZWUgVGFibGUgNS40LCAiSW50ZXJhY3Rpb24iIHJvdyBmb3IgdGhlIEJPRFkgZG9tYWluLCBhbmQgRmlndXJlIDUuNSwgcGFuZWwgQiwgbGVmdG1vc3QgcGxvdCkuIFZpc3VhbCBpbnNwZWN0aW9uIG9mIEZpZ3VyZSA1LjUsIHBhbmVsIEEsIHN1Z2dlc3RzIHRoYXQgdGhlc2UgZ2VuZXJhbCB0cmVuZHMgaGVsZCB0cnVlIGZvciBhbGwgYW5pbWF0ZSB2cy4gaW5hbmltYXRlIHRhcmdldCBjaGFyYWN0ZXJzLiBBIHJlZ3Jlc3Npb24gYW5hbHlzaXMgZGlkIG5vIHJldmVhbCBhbnkgcmVsaWFibGUgb3ZlcmFsbCBkaWZmZXJlbmNlcyBpbiBfQk9EWV8gc2NvcmVzIG92ZXIgdGhlIGFnZSByYW5nZSAoc2VlIFRhYmxlIDUuNCwgIkV4YWN0IGFnZSIgcm93IGZvciB0aGUgQk9EWSBkb21haW4pLiAKClRoZSBncm91cCBkaWZmZXJlbmNlcyBpbiB0aGUgcHJldmlvdXMgc2VjdGlvbiBzdWdnZXN0ZWQgdGhhdCBhdHRyaWJ1dGlvbnMgb2YgSEVBUlQgc2hvdWxkIGRlY3JlYXNlIHdpdGggYWdlLiBJIGRpZCBub3Qgb2JzZXJ2ZSBldmlkZW5jZSBvZiB0aGlzIHdpdGhpbiB0aGlzIHNhbXBsZSBvZiBjaGlsZHJlbi4gQXMgaW4gdGhlIEJPRFkgZG9tYWluLCBfSEVBUlRfIHNjb3JlcyB3ZXJlIGdlbmVyYWxseSBoaWdoZXIgYW1vbmcgY2hpbGRyZW4gd2hvIGFzc2Vzc2VkIG9uZSBvZiB0aGUgYW5pbWF0ZSB0YXJnZXQgY2hhcmFjdGVycyB0aGFuIGFtb25nIHRob3NlIHdobyBhc3Nlc3NlZCBvbmUgb2YgdGhlIGluYW5pbWF0ZSB0YXJnZXQgY2hhcmFjdGVycyAoc2VlIFRhYmxlIDUuNCwgIkFuaW1hdGUgY2hhcmFjdGVycyB2cy4gR00iIHJvdyBmb3IgdGhlIEhFQVJUIGRvbWFpbiksIGJ1dCB0aGVyZSB3ZXJlIG5vIHJlbGlhYmxlIGFnZS1yZWxhdGVkIGNoYW5nZXMgaW4gY2hpbGRyZW4ncyBfSEVBUlRfIHNjb3JlcyAoc2VlIFRhYmxlIDUuNCwgIkV4YWN0IGFnZSIgYW5kICJJbnRlcmFjdGlvbiIgcm93cyBmb3IgdGhlIEhFQVJUIGRvbWFpbiwsIGFuZCBGaWd1cmUgNS41LCBwYW5lbCBCLCBjZW50ZXIgcGxvdCkuIFZpc3VhbCBpbnNwZWN0aW9uIG9mIEZpZ3VyZSA1LjUsIHBhbmVsIEEsIHN1Z2dlc3RzIHRoYXQgdGhpcyBtYXkgcmVmbGVjdCB2YXJpYWJpbGl0eSBhY3Jvc3Mgc3BlY2lmaWMgdGFyZ2V0IGNoYXJhY3RlcnM6IEZvciBzb21lIGNoYXJhY3RlcnMgKG1vc3Qgbm90YWJseSwgdGhlIHJvYm90KSBhdHRyaWJ1dGlvbnMgb2YgSEVBUlQgYXBwZWFyZWQgdG8gaW5jcmVhc2Ugb3ZlciB0aGlzIGFnZSByYW5nZSAoNC05eSksIHdoaWxlIGZvciBvdGhlciBjaGFyYWN0ZXJzIChtb3N0IG5vdGFibHksIHRoZSBiZWV0bGUsIHRoZSBkb2xsLCBhbmQgdGhlIGNvbXB1dGVyKSBhdHRyaWJ1dGlvbnMgYXBwZWFyZWQgdG8gZGVjcmVhc2U7IGZvciBtYW55IG9mIHRoZSB0YXJnZXQgY2hhcmFjdGVycyBpbmNsdWRlZCBpbiB0aGlzIHN0dWR5IHRoZXJlIGFwcGVhcmVkIHRvIGJlIG5vIHN5c3RlbWF0aWMgYWdlLXJlbGF0ZWQgZGlmZmVyZW5jZXMgaW4gYXR0cmlidXRpb25zIG9mIEhFQVJULgoKRmluYWxseSwgaW4gbGluZSB3aXRoIHRoZSBncm91cCBkaWZmZXJlbmNlcyBpbiB0aGUgcHJldmlvdXMgc2VjdGlvbiwgX01JTkRfIHNjb3JlcyBnZW5lcmFsbHkgaW5jcmVhc2VkIHdpdGggYWdlIChzZWUgVGFibGUgNS40LCAiRXhhY3QgYWdlIiByb3cgZm9yIHRoZSBNSU5EIGRvbWFpbikuIEFzIGluIHRoZSBCT0RZIGFuZCBNSU5EIGRvbWFpbnMsIF9NSU5EXyBzY29yZXMgd2VyZSBnZW5lcmFsbHkgaGlnaGVyIGFtb25nIGNoaWxkcmVuIHdobyBhc3Nlc3NlZCBvbmUgb2YgdGhlIGFuaW1hdGUgdGFyZ2V0IGNoYXJhY3RlcnMgdGhhbiBhbW9uZyB0aG9zZSB3aG8gYXNzZXNzZWQgb25lIG9mIHRoZSBpbmFuaW1hdGUgdGFyZ2V0IGNoYXJhY3RlcnMgKHNlZSBUYWJsZSA1LjQsICJCZWV0bGUgdnMuIEdNIiByb3cgZm9yIHRoZSBNSU5EIGRvbWFpbinigJRidXQgYWx0aG91Z2ggZ3JvdXAgZGlmZmVyZW5jZXMgc3VnZ2VzdGVkIHRoYXQgdGhpcyBkaWZmZXJlbmNlIHNob3VsZCBpbmNyZWFzZSB3aXRoIGFnZSwgdGhlcmUgd2FzIG5vIGV2aWRlbmNlIGZvciB0aGlzIGludGVyYWN0aW9uIGFtb25nIGNoaWxkcmVuIChzZWUgVGFibGUgNS40LCAiSW50ZXJhY3Rpb24iIHJvdyBmb3IgdGhlIE1JTkQgZG9tYWluLCBhbmQgRmlndXJlIDUuNSwgcGFuZWwgQiwgcmlnaHRtb3N0IHBsb3QpLiBIb3dldmVyLCB2aXN1YWwgaW5zcGVjdGlvbiBvZiBGaWd1cmUgNS41LCBwYW5lbCBBLCBzdWdnZXN0cyB0aGF0IHRoZXJlIHdlcmUgdHdvIHRhcmdldCBjaGFyYWN0ZXJzIGZvciB3aG9tIGF0dHJpYnV0aW9ucyBvZiBNSU5EIGRpZCBfTk9UXyBpbmNyZWFzZSB3aXRoIGFnZTogbmFtZWx5LCB0aGUgdHdvIGluZXJ0IHRveXMgKHRoZSB0ZWRkeSBiZWFyIGFuZCB0aGUgZG9sbCkuIEludGVyZXN0aW5nbHksIHRoaXMgcGxvdCBzdWdnZXN0cyB0aGF0IHRoZSB0d28gdGVjaG5vbG9naWVzICh0aGUgcm9ib3QgYW5kIHRoZSBjb21wdXRlcikgYXBwZWFyIHRvIGJlIGFtb25nIHRoZSBjaGFyYWN0ZXJzIGZvciB3aG9tIGFnZS1yZWxhdGVkIGNoYW5nZXMgaW4gYXR0cmlidXRpb25zIG9mIE1JTkQgbWF5IGhhdmUgYmVlbiBtb3N0IGRyYW1hdGlj4oCUYnV0IHRoaXMgZ2VuZXJhbCB0cmVuZCBvZiBpbmNyZWFzaW5nIGF0dHJpYnV0aW9ucyBvZiBNSU5EIGFsc28gYXBwZWFycyB0byBoYXZlIGFwcGxpZWQgdG8gYWxsIG9mIHRoZSBhbmltYXRlIGNoYXJhY3RlcnMuCgojIyBEaXNjdXNzaW9uCgpYWCBfX0lOU0VSVCBESVNDVVNTSU9OX18KCk9VVExJTkU6CmFkdWx0czogCiAgICAtIGxpa2Ugc3R1ZHkgMiwgYW5pbWF0ZS1pbmFuaW1hdGUgZGlzdGluY3Rpb24gc3Ryb25nZXN0IGluIHRoZSBCT0RZIGRvbWFpbgogICAgLSBsaWtlIHN0dWR5IDIsIG1vc3QgYmVpbmdzIG5vdCBncmFudGVkIG11Y2ggSEVBUlQ6IHZhcmlhYmxlIGFtb25nIHRoZSBhbmltYXRlIGJlaW5ncyAoYW5kIHZlcnkgbGl0dGxlIGFtb25nIGluYW5pbWF0ZXMpIC0gaGFya2VucyBiYWNrIHRvIGNoMDQKICAgIC0gYWxsIGFuaW1hdGVzIGdyYW50ZWQgTUlOROKAlGFuZCBzb21lIGluYW5pbWF0ZXMgKHRlY2hub2xvZ2llcywgbGlrZSBzdHVkeSAyKQoKY2hpbGRyZW46Ci0gQk9EWTogCiAgICAtIGFuaW1hdGUtaW5hbmltYXRlIGRpc3RpbmN0aW9uIGluIHBsYWNlIGV2ZW4gaW4geW91bmdlciBhZ2UgZ3JvdXAgdGhhbiBzdHVkeSAyCiAgICAtIGJ1dCBhbmltYXRlLWluYW5pbWF0ZSBkaXN0aW5jdGlvbiBiZWNvbWVzIG1vcmUgY2xlYXIvcm9idXN0IHdpdGggYWdlCi0gSEVBUlQ6IAogICAgLSBsaWtlIHN0dWR5IDIsIHN1YnN0YW50aWFsIGNoaWxkIHZzLiBhZHVsdCBkaWZmZXJlbmNlcyAoY2hpbGRyZW4gPiBhZHVsdHMpLi4uCiAgICAtIC4uLmJ1dCBOT1QgcmVmbGVjdGVkIGluIGFnZSBkaWZmcyB3aXRoaW4gdGhlIGNoaWxkIHNhbXBsZXMhCiAgICAtIGVzcGVjaWFsbHkgcGVyc2lzdGFudDogb3Zlci1hdHRyaWJ1dGlvbnMgdG8gbW91c2UgKD8pLCByb2JvdCAoaW5jcmVhc2luZyEpCiAgICAtIG1heWJlIEhFQVJUIGRpZmZzIGFyZSBub3QgX2RldmVsb3BtZW50YWxfIGRpZmZlcmVuY2VzPwotIE1JTkQ6IAogICAgLSBtb3JlIHN0cm9uZ2x5IHRoYW4gc3R1ZHkgMiwgZHJhbWF0aWMgaW5jcmVhc2VzIHdpdGggYWdlCiAgICAtIGxpa2UgYWR1bHRzIGFuZCBsaWtlIHN0dWR5IDIsIGN1dHMgYWNyb3NzIGFuaW1hdGUtaW5hbmltYXRlIGRpc3RpbmN0aW9uCiAgICAKCiMgU3R1ZHkgNDogQSBmb2N1cyBvbiBlYXJseSBjaGlsZGhvb2QgKDQtNXkpCgpTdHVkeSA0IGJ1aWxkcyBvbiBTdHVkeSAzIGJ5IHByb3ZpZGluZyBhIHRhcmdldGVkIGludmVzdGlnYXRpb24gb2YgcmVwcmVzZW50YXRpb25zIG9mIG1lbnRhbCBsaWZlIGluIHRoZSBwcmVzY2hvb2wgeWVhcnMgKDQtNXkpLiBJbiB0aGlzIGNoYXB0ZXIsIEkgYWdhaW4gZm9jdXMgb24gd2hhdCB0aGlzIHN0dWR5IGNhbiByZXZlYWwgYWJvdXQgYXR0cmlidXRpb25zIG9mIEJPRFksIEhFQVJULCBhbmQgTUlORCBhdCB0aGUgZWFybGllc3QgcG9pbnQgaW4gZGV2ZWxvcG1lbnQgdGhhdCBJIGhhdmUgZXhhbWluZWQgc28gZmFyLCBhbmQgY29tcGFyZSB0aGUgZGVwbG95bWVudCBvZiB0aGlzIGNvbmNlcHQgYW1vbmcgeW91bmcgY2hpbGRyZW4gdnMuIGFkdWx0cy4gCgpUbyByZXZpZXcsIGluIFN0dWR5IDQsIGByIG5yb3coZDRfYWRfd2lkZSkvMmAgVVMgYWR1bHRzIGFuZCBgciBucm93KGQ0XzQ2X3dpZGUpLzJgIFVTIGNoaWxkcmVuIGJldHdlZW4gdGhlIGFnZXMgb2YgYHIgc3VtbWFyeShkNF80NiRhZ2UpWyJNaW4uIl0gJT4lIHJvdW5kKDIpICU+JSBmb3JtYXQobnNtYWxsID0gMilgLWByIHN1bW1hcnkoZDRfNDYkYWdlKVsiTWF4LiJdICU+JSByb3VuZCgyKSAlPiUgZm9ybWF0KG5zbWFsbCA9IDIpYCB5ZWFycyAobWVkaWFuOiBgciBzdW1tYXJ5KGQ0XzQ2JGFnZSlbIk1lZGlhbiJdICU+JSByb3VuZCgyKSAlPiUgZm9ybWF0KG5zbWFsbCA9IDIpYHkpIGVhY2ggYXNzZXNzZWQgdHdvIHRhcmdldCBjaGFyYWN0ZXJzIG9uIDE4IG1lbnRhbCBjYXBhY2l0aWVzLCB3aXRoIGFsbCBhc3BlY3RzIG9mIHRoZSBleHBlcmltZW50YWwgZGVzaWduIHRhaWxvcmVkIHRvIGJlIGFwcHJvcHJpYXRlIGZvciB0aGlzIHlvdW5nZXN0IGFnZSBncm91cC4gVGhpcyBzdHVkeSBlbXBsb3llZCB0aGUgImVkZ2UgY2FzZSIgdmFyaWFudCBvZiB0aGUgZ2VuZXJhbCBhcHByb2FjaCwgd2l0aCBwYXJ0aWNpcGFudHMgYXNzZXNzaW5nIGJvdGggYSBiZWV0bGUgb3IgYSByb2JvdCBpbiBzZXF1ZW5jZSAod2l0aCBvcmRlciBjb3VudGVyYmFsYW5jZWQgYWNyb3NzIHBhcnRpY2lwYW50cykuIChTZWUgQ2hhcHRlciBJSSBmb3IgZGV0YWlsZWQgbWV0aG9kcy4pCgojIyBTcGVjaWFsIG5vdGVzIG9uIGRhdGEgcHJvY2Vzc2luZyBhbmQgYW5hbHlzaXMKCkFzIGluIFN0dWRpZXMgMiBhbmQgMywgdG8gZmFjaWxpdGF0ZSBjb21wYXJpc29uIGJldHdlZW4gY2hpbGRyZW4gYW5kIGFkdWx0cyBpbiBTdHVkeSA0LCBJIHVzZSBhZHVsdHMnIF9CT0RZXywgX0hFQVJUXywgYW5kIF9NSU5EXyBzY2FsZXMgKGFzIGRlc2NyaWJlZCBpbiBDaGFwdGVyIElWKSB0byBhbmFseXplIGJvdGggYWdlIGdyb3Vwcy4gRm9yIGFuYWx5c2VzIHVzaW5nIHNjYWxlcyBkZXJpdmVkIGZyb20gRUZBIG9mIGNoaWxkcmVuJ3Mgb3duIHJlc3BvbnNlcywgc2VlIFtYWCBBcHBlbmRpeCBDXS4KCiMjIFJlc3VsdHMKCmBgYHtyfQpkNF80NmFkX3Njb3JlZF9hZCA8LSBmdWxsX2pvaW4oZDRfYWRfc2NvcmVkX2FkLCBkNF80Nl9zY29yZWRfYWQpICU+JQogIGxlZnRfam9pbihhbmltX2xvb2t1cCkgJT4lCiAgbXV0YXRlKGNoYXJhY3RlciA9IGZhY3RvcihjaGFyYWN0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBsZXZlbHMoZDRfYWRfc2NvcmVkX2FkJGNoYXJhY3RlcikpLAogICAgICAgICBhZ2VfZ3JvdXAgPSBmYWN0b3IoYWdlX2dyb3VwKSkKCmNvbnRyYXN0cyhkNF80NmFkX3Njb3JlZF9hZCRjaGFyYWN0ZXIpIDwtIGNvbnRyYXN0c19zdW1fZWRnZQpjb250cmFzdHMoZDRfNDZhZF9zY29yZWRfYWQkZmFjdG9yKSA8LSBjb250cmFzdHNfY250M19mYWN0b3IKY29udHJhc3RzKGQ0XzQ2YWRfc2NvcmVkX2FkJGFuaW1faW5hbikgPC0gY29udHJhc3RzX3N1bTJfYW5pbQpjb250cmFzdHMoZDRfNDZhZF9zY29yZWRfYWQkYWdlX2dyb3VwKSA8LSBjb250cmFzdHNfZHVtMl9hZ2VncApgYGAKCiMjIyBDaGlsZHJlbiB2cy4gYWR1bHRzCgpgYGB7cn0KZDRfNDZhZF9tZWFucyA8LSBkNF80NmFkX3Njb3JlZF9hZCAlPiUKICBncm91cF9ieShhZ2VfZ3JvdXAsIGNoYXJhY3RlciwgZmFjdG9yKSAlPiUKICBtdWx0aV9ib290X3N0YW5kYXJkKGNvbCA9ICJzY29yZSIsIG5hLnJtID0gVCkgJT4lCiAgdW5ncm91cCgpCmBgYAoKU2VlIEZpZ3VyZSA1LjYsIHBhbmVsIEEsIGZvciBfQk9EWV8sIF9IRUFSVF8sIGFuZCBfTUlORF8gc2NvcmVzIGZvciBib3RoIHRhcmdldCBjaGFyYWN0ZXJzIGFtb25nIHRoZSA0LSB0byA1LXllYXItb2xkIGNoaWxkcmVuIGFuZCBhZHVsdHMgaW4gU3R1ZHkgNC4gT24gdGhlIHdob2xlLCBwYXJ0aWNpcGFudHMnIGFzc2Vzc21lbnRzIG9mIHRoZXNlIHR3byAiZWRnZSBjYXNlcyIgaW4gU3R1ZHkgNCB3ZXJlIHNpbWlsYXIgdG8gdGhvc2Ugb2YgYWR1bHRzJyBhbmQgNy0gdG8gOS15ZWFyLW9sZCBjaGlsZHJlbiBpbiBTdHVkeSAyLgoKQXMgaW4gU3R1ZHkgMiwgaW4gdGhlIGFnZ3JlZ2F0ZSwgYm90aCBjaGlsZHJlbiBhbmQgYWR1bHRzIHNlZW0gdG8gaGF2ZSBjb25zaWRlcmVkIHRoZSBiZWV0bGUgKHRoZSBhbmltYXRlIGNoYXJhY3RlcikgdG8gYmUgYSBiZWluZyB3aXRoIGEgbW9kZXJhdGVseSBoaWdoIGRlZ3JlZSBvZiBwaHlzaW9sb2dpY2FsIHNlbnNhdGlvbnMgKG1lYW4gX0JPRFlfIHNjb3JlIGFtb25nIGFkdWx0czogYHIgc2NvcmVfbWVhbl9wcmludF9mdW4oZDRfNDZhZF9tZWFucywgIkJPRFkiLCAiYWR1bHRzIiwgImJlZXRsZSIpYDsgYW1vbmcgY2hpbGRyZW46IGByIHNjb3JlX21lYW5fcHJpbnRfZnVuKGQ0XzQ2YWRfbWVhbnMsICJCT0RZIiwgImNoaWxkcmVuNDYiLCAiYmVldGxlIilgKSBhbmQgcGVyY2VwdHVhbC1jb2duaXRpdmUgY2FwYWNpdGllcyAobWVhbiBfTUlORF8gc2NvcmUgYW1vbmcgYWR1bHRzOiBgciBzY29yZV9tZWFuX3ByaW50X2Z1bihkNF80NmFkX21lYW5zLCAiTUlORCIsICJhZHVsdHMiLCAiYmVldGxlIilgOyBhbW9uZyBjaGlsZHJlbjogYHIgc2NvcmVfbWVhbl9wcmludF9mdW4oZDRfNDZhZF9tZWFucywgIk1JTkQiLCAiY2hpbGRyZW40NiIsICJiZWV0bGUiKWApLiBBZHVsdHMgZ3JhbnRlZCByZWxhdGl2ZWx5IGxpdHRsZSBpbiB0aGUgd2F5IG9mIHNvY2lhbC1lbW90aW9uYWwgYWJpbGl0aWVzIHRvIHRoZSBiZWV0bGUgKG1lYW4gX0hFQVJUXyBzY29yZSBhbW9uZyBhZHVsdHM6IGByIHNjb3JlX21lYW5fcHJpbnRfZnVuKGQ0XzQ2YWRfbWVhbnMsICJIRUFSVCIsICJhZHVsdHMiLCAiYmVldGxlIilgKSwgYnV04oCUd2l0aCB0aGUgb2xkZXIgY2hpbGRyZW4gaW4gU3R1ZHkgMuKAlGNoaWxkcmVuJ3MgX0hFQVJUXyBzY29yZXMgdGVuZGVkIHRvIGhvdmVyIGFyb3VuZCB0aGUgbWlkcG9pbnQgb2YgdGhlIHNjYWxlIChtZWFuOiBgciBzY29yZV9tZWFuX3ByaW50X2Z1bihkNF80NmFkX21lYW5zLCAiSEVBUlQiLCAiY2hpbGRyZW40NiIsICJiZWV0bGUiKWApLgoKRm9yIHRoZSByb2JvdCAodGhlIGluYW5pbWF0ZSBjaGFyYWN0ZXIpIGJvdGggYWR1bHRzIGFuZCBjaGlsZHJlbiwgaW4gdGhlIGFnZ3JlZ2F0ZSwgaW5kaWNhdGVkIGEgbW9kZXJhdGUgZGVncmVlIG9mIHBlcmNlcHR1YWwtY29nbml0aXZlIGFiaWxpdGllcyAobWVhbiBfTUlORF8gc2NvcmUgYW1vbmcgYWR1bHRzOiBgciBzY29yZV9tZWFuX3ByaW50X2Z1bihkNF80NmFkX21lYW5zLCAiTUlORCIsICJhZHVsdHMiLCAicm9ib3QiKWA7IGFtb25nIGNoaWxkcmVuOiBgciBzY29yZV9tZWFuX3ByaW50X2Z1bihkNF80NmFkX21lYW5zLCAiTUlORCIsICJjaGlsZHJlbjQ2IiwgInJvYm90IilgKSwgYW5kIGFwcGVhcmVkIHRvIGFncmVlIHRoYXQgdGhlIHJvYm90IGhhZCBsZXNzIGluIHRoZSB3YXkgb2YgcGh5c2lvbG9naWNhbCBzZW5zYXRpb25zIGFuZCBzb2NpYWwtZW1vdGlvbmFsIGFiaWxpdGllcyB0aGFuIHRoZSBiZWV0bGUuIEhvd2V2ZXIsIGVjaG9pbmcgdGhlIHJlc3VsdHMgb2YgU3R1ZHkgMiwgdGhlIHR3byBhZ2UgZ3JvdXBzIGFwcGVhciB0byBoYXZlIGRpdmVyZ2VkIGluIHRoZWlyIGFzc2Vzc21lbnRzIG9mIHRoZSBhYnNvbHV0ZSBkZWdyZWUgb2YgQk9EWSBhbmQgSEVBUlQgdGhhdCB0aGV5IHdlcmUgd2lsbGluZyB0byBncmFudCB0aGUgcm9ib3Q6IEFkdWx0cyBncmFudGVkIHZlcnkgbGl0dGxlIGluIGVpdGhlciBkb21haW4gKG1lYW4gX0JPRFlfIHNjb3JlOiBgciBzY29yZV9tZWFuX3ByaW50X2Z1bihkNF80NmFkX21lYW5zLCAiQk9EWSIsICJhZHVsdHMiLCAicm9ib3QiKWA7IG1lYW4gX0hFQVJUXyBzY29yZTogYHIgc2NvcmVfbWVhbl9wcmludF9mdW4oZDRfNDZhZF9tZWFucywgIkhFQVJUIiwgImFkdWx0cyIsICJyb2JvdCIpYCksIHdoaWxlIGNoaWxkcmVuIGdyYW50ZWQgbWlkZGxpbmcgYWJpbGl0aWVzIGluIGJvdGggZG9tYWlucyAobWVhbiBfQk9EWV8gc2NvcmU6IGByIHNjb3JlX21lYW5fcHJpbnRfZnVuKGQ0XzQ2YWRfbWVhbnMsICJCT0RZIiwgImNoaWxkcmVuNDYiLCAicm9ib3QiKWA7IG1lYW4gX0hFQVJUXyBzY29yZTogYHIgc2NvcmVfbWVhbl9wcmludF9mdW4oZDRfNDZhZF9tZWFucywgIkhFQVJUIiwgImNoaWxkcmVuNDYiLCAicm9ib3QiKWApLgoKYGBge3J9CmZpZ3VyZTUuNl9wbG90cyA8LSBjaGFyYWN0ZXJfbXVsdGlwbG90X2FnZSgKICBkZl9zY29yZWQgPSBmdWxsX2pvaW4oZDRfYWRfc2NvcmVkX2FkLCBkNF80Nl9zY29yZWRfYWQpLCAKICBzaG93X2FuaW1fYnlfc3ViaiA9IFQsCiAgYWdlX2xldmVscyA9IGMoImNoaWxkcmVuNDYiLCAiYWR1bHRzIiksCiAgYWdlX2xhYmVscyA9IGMoIkNoaWxkcmVuLCA0LTV5IiwgIkFkdWx0cyIpLAogIHBsb3RfbWFyZ191cHBlciA9IC00NSwgYXhpc19oZWlnaHQgPSAwLjA5KQpgYGAKCmBgYHtyfQpmaWd1cmU1LjZfcGxvdHNfY2FwIDwtIGFkZF9zdWIoZmlndXJlNS42X3Bsb3RzLCBzdHJfd3JhcCgiRmlndXJlIDUuNjogQXR0cmlidXRpb25zIG9mIEJPRFksIEhFQVJULCBhbmQgTUlORCBhbW9uZyBjaGlsZHJlbiAoNC01eSkgYW5kIGFkdWx0cyBpbiBTdHVkeSA0LiBGb3IgZWFjaCBjb25jZXB0dWFsIHVuaXQsIHNjb3JlcyBjb3VsZCByYW5nZSBmcm9tIDAtMS4gUGxvdHMgaW5jbHVkZSAoQSkgc2NvcmVzIGJ5IHRhcmdldCBjaGFyYWN0ZXIsIGFuZCAoQikgZGlzdHJpYnV0aW9ucyBvZiBzY29yZXMuIEluZGl2aWR1YWwgcGFydGljaXBhbnRzIGFyZSBwbG90dGVkIGFzIHNtYWxsLCB0cmFuc2x1Y2VudCBjaXJjbGVzLCBhbmQgbWVhbiBzY29yZXMgYnkgY2hhcmFjdGVyIGFyZSBwbG90dGVkIGFzIGxhcmdlciwgc29saWQgZGlhbW9uZHMuIEVycm9yIGJhcnMgYXJlIDk1JSBib290c3RyYXBwZWQgY29uZmlkZW5jZSBpbnRlcnZhbHMuIiwgOTApLCB4ID0gMCwgaGp1c3QgPSAwKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVCwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuOH0KZ2dkcmF3KGZpZ3VyZTUuNl9wbG90c19jYXApCmBgYAoKYGBge3J9CiMgcl9kNF9kZXZncF9CT0RZIDwtIGJybShzY29yZSB+IGFuaW1faW5hbiAqIGFnZV9ncm91cCwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkNF80NmFkX3Njb3JlZF9hZCAlPiUKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKGZhY3RvciA9PSAiQk9EWSIpLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTkpKQojIAojIHNhdmVSRFMocl9kNF9kZXZncF9CT0RZLCAiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kNF9kZXZncF9CT0RZIikKCnJfZDRfZGV2Z3BfQk9EWSA8LSByZWFkUkRTKCIuL3N0b3JlZC9icm1zX21vZGVscy9yX2Q0X2RldmdwX0JPRFkiKQoKc3VtbWFyeShyX2Q0X2RldmdwX0JPRFkpCmBgYAoKYGBge3J9CiMgcl9kNF9kZXZncF9IRUFSVCA8LSBicm0oc2NvcmUgfiBhbmltX2luYW4gKiBhZ2VfZ3JvdXAsCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZDRfNDZhZF9zY29yZWRfYWQgJT4lCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihmYWN0b3IgPT0gIkhFQVJUIiksCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OSkpCiMgCiMgc2F2ZVJEUyhyX2Q0X2RldmdwX0hFQVJULCAiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kNF9kZXZncF9IRUFSVCIpCgpyX2Q0X2RldmdwX0hFQVJUIDwtIHJlYWRSRFMoIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDRfZGV2Z3BfSEVBUlQiKQoKc3VtbWFyeShyX2Q0X2RldmdwX0hFQVJUKQpgYGAKCmBgYHtyfQojIHJfZDRfZGV2Z3BfTUlORCA8LSBicm0oc2NvcmUgfiBhbmltX2luYW4gKiBhZ2VfZ3JvdXAsCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZDRfNDZhZF9zY29yZWRfYWQgJT4lCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihmYWN0b3IgPT0gIk1JTkQiKSwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVzID0gNCwgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5KSkKIyAKIyBzYXZlUkRTKHJfZDRfZGV2Z3BfTUlORCwgIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDRfZGV2Z3BfTUlORCIpCgpyX2Q0X2RldmdwX01JTkQgPC0gcmVhZFJEUygiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kNF9kZXZncF9NSU5EIikKCnN1bW1hcnkocl9kNF9kZXZncF9NSU5EKQpgYGAKCmBgYHtyfQpyZWd0YWJfZDRfZGV2Z3AgPC0gcmVndGFiX2RldmdwX2Z1bigKICByZWdfYm9keSA9IHJfZDRfZGV2Z3BfQk9EWSwgCiAgcmVnX2hlYXJ0ID0gcl9kNF9kZXZncF9IRUFSVCwKICByZWdfbWluZCA9IHJfZDRfZGV2Z3BfTUlORCwKICBhZ2VfbGV2ZWxzID0gYygiYWdlX2dyb3VwX2NoaWxkIiksIAogIGFnZV9sYWJlbHMgPSBjKCJDaGlsZHJlbiB2cy4gYWR1bHRzIikpCmBgYAoKYGBge3J9CnRhYmxlNS41IDwtIGRldmdwX3RhYmxlX2Z1bihyZWd0YWJfZGV2Z3AgPSByZWd0YWJfZDRfZGV2Z3AsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbl9jaGFyYWN0ZXJzID0gMiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9uYW1lID0gIlRhYmxlIDUuNSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R1ZHlfbmFtZSA9ICJTdHVkeSA0IiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZ2VfZ3JvdXAgPSAiNC0gdG8gNS15ZWFyLW9sZCBjaGlsZHJlbiIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbl9hZ2VfZ3JvdXBzID0gMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJfY29tcGFyZV9sYWJlbCA9ICJCZWV0bGUgdnMuIEdNIikKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnRhYmxlNS41CmBgYAoKQSBzZXJpZXMgb2YgQmF5ZXNpYW4gcmVncmVzc2lvbiBhbmFseXNlcyBjb25maXJtZWQgdGhlc2Ugb3ZlcmFsbCBpbXByZXNzaW9ucywgeWllbGRpbmcgcmVtYXJrYWJseSBzaW1pbGFyIHJlc3VsdHMgdG8gdGhlIHBhcmFsbGVsIGNvbXBhcmlzb24gYmV0d2VlbiA3LSB0byA5LXllYXItb2xkIGNoaWxkcmVuIGFuZCBhZHVsdHMgaW4gU3R1ZHkgMi4gCgpBcyBpbiBTdHVkeSAyLCBjaGlsZHJlbidzIF9CT0RZXyBzY29yZXMgd2VyZSBnZW5lcmFsbHkgaGlnaGVyIHRoYW4gYWR1bHRzJyAoc2VlIFRhYmxlIDUuNSwgIkNoaWxkcmVuIHZzLiBhZHVsdHMiIHJvdyBmb3IgdGhlIEJPRFkgZG9tYWluKS4gVGhpcyBhcHBlYXJzIHRvIGhhdmUgYmVlbiBwYXJ0aWN1bGFybHkgdHJ1ZSBmb3IgdGhlIHJvYm90IChzZWUgRmlndXJlIDUuNiwgdG9wIHJvdyk7IGFzIGEgcmVzdWx0LCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBiZWV0bGUgYW5kIHRoZSByb2JvdCB3YXMgYXR0ZW51YXRlZCBhbW9uZyBjaGlsZHJlbiwgcmVsYXRpdmUgdG8gYWR1bHRzIChzZWUgVGFibGUgNS41LCAiSW50ZXJhY3Rpb24iIHJvdyBmb3IgdGhlIEJPRFkgZG9tYWluKS4gQWdhaW4sIGFzIGluIFN0dWR5IDIsIGNoaWxkcmVuJ3MgX0hFQVJUXyBzY29yZXMgd2VyZSBhbHNvIGhpZ2hlciB0aGFuIGFkdWx0cycgKHNlZSBUYWJsZSA1LjUsICJDaGlsZHJlbiB2cy4gYWR1bHRzIiByb3cgZm9yIHRoZSBIRUFSVCBkb21haW4sIGFuZCBGaWd1cmUgNS42LCBtaWRkbGUgcm93KS4gSW4gU3R1ZHkgNCwgdGhpcyBkaWZmZXJlbmNlIGJldHdlZW4gY2hpbGRyZW4gYW5kIGFkdWx0cyB3YXMgc2xpZ2h0bHkgbW9yZSBwcm9ub3VuY2VkIGZvciB0aGUgcm9ib3QgdGhhbiB0aGUgYmVldGxlIChzZWUgVGFibGUgNS41LCAiSW50ZXJhY3Rpb24iIHJvdyBmb3IgdGhlIEJPRFkgZG9tYWluKS4gQW5kIHlldCBhZ2FpbiwgYXMgaW4gU3R1ZHkgMiwgdGhlcmUgd2VyZSBubyBzdWJzdGFudGlhbCBkaWZmZXJlbmNlcyBiZXR3ZWVuIGNoaWxkcmVuIGFuZCBhZHVsdHMgaW4gdGhlaXIgX01JTkRfIHNjb3JlcyAoc2VlIFRhYmxlIDUuNSBhbmQgRmlndXJlIDUuNiwgYm90dG9tIHJvdykKCiMjIyBBZ2UtcmVsYXRlZCBkaWZmZXJlbmNlcyBiZXR3ZWVuIDQtNXkKCkhlcmUsIEkgZXhwbG9yZSBhZ2UtcmVsYXRlZCBkaWZmZXJlbmNlcyB3aXRoaW4gdGhlIGNoaWxkIHNhbXBsZTogSG93IG1pZ2h0IGNoaWxkcmVuJ3MgYXR0cmlidXRpb25zIGNoYW5nZSBvdmVyIHRoZSBhZ2UgcmFuZ2UgaW5jbHVkZWQgaW4gdGhpcyBzdHVkeT8gVW5saWtlIFN0dWRpZXMgMi0zLCB3aGljaCBlYWNoIGluY2x1ZGVkIGEgcmVsYXRpdmVseSB3aWRlIGFnZSByYW5nZSAoNy05eSBpbiBTdHVkeSAyOyA0LTl5IGluIFN0dWR5IDMpLCB0aGUgYWdlIHJhbmdlIGluY2x1ZGVkIGluIFN0dWR5IDQgd2FzIHJlbGF0aXZlbHkgbmFycm93LCByZW5kZXJpbmcgaXQgbGVzcyBsaWtlbHkgdG8gb2JzZXJ2ZSBhZ2UtcmVsYXRlZCBkaWZmZXJlbmNlcy4gTm9uZXRoZWxlc3MsIGJhc2VkIG9uIHRoZSBhZ2UgZ3JvdXAgY29tcGFyaXNvbnMgZGlzY3Vzc2VkIGluIHRoZSBwcmV2aW91cyBzZWN0aW9ucywgSSBleHBlY3RlZCB0aGF0IHRoZSBtb3N0IGxpa2VseSBhZ2UtcmVsYXRlZCBkaWZmZXJlbmNlcyB0byBlbWVyZ2Ugd291bGQgYmUgbG93ZXIgX0JPRFlfIHNjb3JlcywgcGFydGljdWxhcmx5IGZvciB0aGUgcm9ib3Q7IGFuZCBsb3dlciBfSEVBUlRfIHNjb3JlcyBmb3IgYm90aCB0YXJnZXQgY2hhcmFjdGVycy4KCmBgYHtyfQpwbG90c19kNF9kZXYgPC0gY2hhcmFjdGVyX2RldnBsb3QoZGZfc2NvcmVkX2FkID0gZDRfYWRfc2NvcmVkX2FkLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRmX3Njb3JlZF9jaCA9IGQ0XzQ2X3Njb3JlZF9hZCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZl9hZ2UgPSBkNF80NikKYGBgCgpgYGB7cn0KZmlndXJlNS43IDwtIHBsb3RzX2Q0X2RldiArCiAgbGFicyh0aXRsZSA9ICJTdHVkeSA0OiBDaGlsZHJlbiwgNC01eSIpCmBgYAoKYGBge3J9CmZpZ3VyZTUuN19wbG90c19jYXAgPC0gYWRkX3N1YihmaWd1cmU1LjcsIHN0cl93cmFwKCJGaWd1cmUgNS43OiBDaGFuZ2VzIGluIGF0dHJpYnV0aW9ucyBvZiBCT0RZLCBIRUFSVCwgYW5kIE1JTkQgYW1vbmcgNC0gdG8gNS15ZWFyLW9sZCBjaGlsZHJlbiBpbiBTdHVkeSA0LiBGb3IgZWFjaCBjb25jZXB0dWFsIHVuaXQsIHNjb3JlcyBjb3VsZCByYW5nZSBmcm9tIDAtMS4gSW5kaXZpZHVhbCBjaGlsZHJlbiBhcmUgcGxvdHRlZCBhcyBzbWFsbCwgdHJhbnNsdWNlbnQgY2lyY2xlczsgbWVhbiBzY29yZXMgYW1vbmcgYWR1bHRzIGFyZSBwbG90dGVkIGFzIGxhcmdlciwgc29saWQgZGlhbW9uZHMuIEVycm9yIGJhcnMgYXJlIDk1JSBib290c3RyYXBwZWQgY29uZmlkZW5jZSBpbnRlcnZhbHMuIExpbmVzIGNvcnJlc3BvbmQgdG8gc2ltcGxlIGxpbmVhciByZWdyZXNzaW9ucyAoZm9ybXVsYTogc2NvcmUgfiBhZ2UpLiIsIDExMCksIHggPSAwLCBoanVzdCA9IDApCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBULCBmaWcud2lkdGggPSA1LCBmaWcuYXNwID0gMC41fQpnZ2RyYXcoZmlndXJlNS43X3Bsb3RzX2NhcCkKYGBgCgpgYGB7cn0KZDRfNDZhZ2Vfc2NvcmVkX2FkIDwtIGQ0XzQ2X3Njb3JlZF9hZCAlPiUKICBsZWZ0X2pvaW4oZDRfNDYgJT4lIGRpc3RpbmN0KHN1YmlkLCBhZ2UpKSAlPiUKICBsZWZ0X2pvaW4oYW5pbV9sb29rdXApICU+JQogIGZpbHRlcighaXMubmEoYWdlKSkgJT4lCiAgbXV0YXRlKGNoYXJhY3RlciA9IGZhY3RvcihjaGFyYWN0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBsZXZlbHMoZDRfYWRfc2NvcmVkX2FkJGNoYXJhY3RlcikpLAogICAgICAgICBhZ2VfY2VudGVyZWQgPSBzY2FsZShhZ2UsIHNjYWxlID0gRikpCgpjb250cmFzdHMoZDRfNDZhZ2Vfc2NvcmVkX2FkJGNoYXJhY3RlcikgPC0gY29udHJhc3RzX3N1bV9lZGdlCmNvbnRyYXN0cyhkNF80NmFnZV9zY29yZWRfYWQkZmFjdG9yKSA8LSBjb250cmFzdHNfY250M19mYWN0b3IKY29udHJhc3RzKGQ0XzQ2YWdlX3Njb3JlZF9hZCRhbmltX2luYW4pIDwtIGNvbnRyYXN0c19zdW0yX2FuaW0KYGBgCgpgYGB7cn0KIyByX2Q0X2RldnNjb3JlX0JPRFkgPC0gYnJtKHNjb3JlIH4gYW5pbV9pbmFuICogYWdlX2NlbnRlcmVkICsgKDEgfCBzdWJpZCksCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZDRfNDZhZ2Vfc2NvcmVkX2FkICU+JQojICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoZmFjdG9yID09ICJCT0RZIiksCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OSkpCiMgCiMgc2F2ZVJEUyhyX2Q0X2RldnNjb3JlX0JPRFksICIuL3N0b3JlZC9icm1zX21vZGVscy9yX2Q0X2RldnNjb3JlX0JPRFkiKQoKcl9kNF9kZXZzY29yZV9CT0RZIDwtIHJlYWRSRFMoIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDRfZGV2c2NvcmVfQk9EWSIpCgpzdW1tYXJ5KHJfZDRfZGV2c2NvcmVfQk9EWSkKYGBgCgpgYGB7cn0KIyByX2Q0X2RldnNjb3JlX0hFQVJUIDwtIGJybShzY29yZSB+IGFuaW1faW5hbiAqIGFnZV9jZW50ZXJlZCArICgxIHwgc3ViaWQpLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGQ0XzQ2YWdlX3Njb3JlZF9hZCAlPiUKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKGZhY3RvciA9PSAiSEVBUlQiKSwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVzID0gNCwgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5KSkKIyAKIyBzYXZlUkRTKHJfZDRfZGV2c2NvcmVfSEVBUlQsICIuL3N0b3JlZC9icm1zX21vZGVscy9yX2Q0X2RldnNjb3JlX0hFQVJUIikKCnJfZDRfZGV2c2NvcmVfSEVBUlQgPC0gcmVhZFJEUygiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kNF9kZXZzY29yZV9IRUFSVCIpCgpzdW1tYXJ5KHJfZDRfZGV2c2NvcmVfSEVBUlQpCmBgYAoKYGBge3J9CiMgcl9kNF9kZXZzY29yZV9NSU5EIDwtIGJybShzY29yZSB+IGFuaW1faW5hbiAqIGFnZV9jZW50ZXJlZCArICgxIHwgc3ViaWQpLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGQ0XzQ2YWdlX3Njb3JlZF9hZCAlPiUKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKGZhY3RvciA9PSAiTUlORCIpLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTkpKQojIAojIHNhdmVSRFMocl9kNF9kZXZzY29yZV9NSU5ELCAiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kNF9kZXZzY29yZV9NSU5EIikKCnJfZDRfZGV2c2NvcmVfTUlORCA8LSByZWFkUkRTKCIuL3N0b3JlZC9icm1zX21vZGVscy9yX2Q0X2RldnNjb3JlX01JTkQiKQoKc3VtbWFyeShyX2Q0X2RldnNjb3JlX01JTkQpCmBgYAoKYGBge3J9CnJlZ3RhYl9kNF9kZXZzY29yZSA8LSByZWd0YWJfZGV2c2NvcmVfZnVuKHJlZ19ib2R5ID0gcl9kNF9kZXZzY29yZV9CT0RZLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdfaGVhcnQgPSByX2Q0X2RldnNjb3JlX0hFQVJULAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdfbWluZCA9IHJfZDRfZGV2c2NvcmVfTUlORCkKYGBgCgpgYGB7cn0KdGFibGU1LjYgPC0gZGV2c2NvcmVfdGFibGVfZnVuKHJlZ3RhYl9kZXZzY29yZSA9IHJlZ3RhYl9kNF9kZXZzY29yZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuX2NoYXJhY3RlcnMgPSAyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX25hbWUgPSAiVGFibGUgNS42IiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHVkeV9uYW1lID0gIlN0dWR5IDQiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFnZV9yYW5nZSA9ICI0LSB0byA1LXllYXItb2xkIGNoaWxkcmVuIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuX2FnZSA9IG1lYW4oZDRfNDYkYWdlLCBuYS5ybSA9IFQpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJfY29tcGFyZV9sYWJlbCA9ICJCZWV0bGUgdnMuIEdNIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmVmX3N1YmlkID0gVCkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnRhYmxlNS42CmBgYAoKWFggX19CT09LTUFSSyBMSU5LIFRPIFBSRVZJT1VTIFNFQ1RJT05fXwoKRWNob2luZyB0aGUgcmVzdWx0cyBvZiBTdHVkaWVzIDIgYW5kIDMsIF9CT0RZXyBzY29yZXMgd2VyZSBnZW5lcmFsbHkgaGlnaGVyIGFtb25nIGNoaWxkcmVuIHdobyBhc3Nlc3NlZCB0aGUgYmVldGxlICh0aGUgYW5pbWF0ZSB0YXJnZXQgY2hhcmFjdGVyKSB0aGFuIGFtb25nIGNoaWxkcmVuIHdobyBhc3Nlc3NlZCB0aGUgcm9ib3QgKHRoZSBpbmFuaW1hdGUgdGFyZ2V0IGNoYXJhY3Rlcjsgc2VlIFRhYmxlIDUuNiwgIkJlZXRsZSB2cy4gR00iIHJvdyBmb3IgdGhlIEJPRFkgZG9tYWluKeKAlGJ1dCB0aGlzIGRpZmZlcmVuY2UgaW5jcmVhc2VkIG92ZXIgdGhlIGFnZSByYW5nZSAoc2VlIFRhYmxlIDUuNiwgIkludGVyYWN0aW9uIiByb3cgZm9yIHRoZSBCT0RZIGRvbWFpbiwgYW5kIEZpZ3VyZSA1LjcsIGxlZnRtb3N0IHBsb3QpLiBJbnRlcmVzdGluZ2x5LCB2aXN1YWwgaW5zcGVjdGlvbiBvZiBGaWd1cmUgNS43IHN1Z2dlc3RzIHRoYXQgdGhpcyB3YXMgZHJpdmVuIGJ5IGluY3JlYXNpbmcgYXR0cmlidXRpb25zIG9mIEJPRFkgdG8gdGhlIGJlZXRsZSwgcmF0aGVyIHRoYW4gZGVjcmVhc2luZyBhdHRyaWJ1dGlvbnMgdG8gdGhlIHJvYm904oCUdGhlIHJldmVyc2Ugb2Ygd2hhdCBvbmUgbWlnaHQgcHJlZGljdCBpZiBwcmVzY2hvb2wtYWdlIGNoaWxkcmVuIHdlcmUgZGlzcGxheWluZyBhbiAiYW5pbWlzdCIgdGVuZGVuY3kgaW4gdGhlaXIgbWVudGFsIGNhcGFjaXR5IGF0dHJpYnV0aW9ucy4KCkluIGJvdGggdGhlIEhFQVJUIGFuZCBNSU5EIGRvbWFpbnMsIGNoaWxkcmVuJ3Mgc2NvcmVzIGRpZCBub3QgZGlmZmVyIHJlbGlhYmx5IGFjcm9zcyB0aGUgdHdvIHRhcmdldCBjaGFyYWN0ZXJzIGluIHRoaXMgc3R1ZHkgKHNlZSBUYWJsZSA1LjYsICJCZWV0bGUgdnMuIEdNIiByb3cgZm9yIHRoZSBIRUFSVCBhbmQgTUlORCBkb21haW5zKSwgYW5kIGRpZCBub3QgdmFyeSByZWxpYWJseSBvdmVyIHRoZSBhZ2UgcmFuZ2UgKHNlZSBUYWJsZSA1LjYsICJFeGFjdCBhZ2UiIGFuZCAiSW50ZXJhY3Rpb24iIHJvd3MgZm9yIHRoZSBIRUFSVCBhbmQgTUlORCBkb21haW5zLCBhbmQgRmlndXJlIDUuNywgY2VudGVyIGFuZCByaWdodG1vc3QgcGxvdHMpLgoKIyMgRGlzY3Vzc2lvbgoKCiMgR2VuZXJhbCBkaXNjdXNzaW9uCgoKIyBDaGFwdGVyIGNvbmNsdXNpb24KCgoKCgoKCgoKIyBTQ1JBUFMKCiMjIERvY3VtZW50aW5nIHRoZSBhcHBsaWNhdGlvbiBvciBkZXBsb3ltZW50IG9mIGNvbmNlcHR1YWwgcmVwcmVzZW50YXRpb25zIHRocm91Z2ggWFgKCltYWCBDT1JSRUNUIFRPIEJFIE5PVCBBQk9VVCBGQUNUT1IgU0NPUkVTISBjaGFuZ2UgZnJvbSBmYWN0b3Igc2NvcmVzIHRvIGVuZG9yc2VtZW50cy4gRmFjdG9yIHNjb3JlcyBkb24ndCBnaXZlIGEgc2Vuc2Ugb2YgYWJzb2x1dGVseSB5ZXMvbm8uXQoKSGF2aW5nIGluZmVycmVkIGEgY29uY2VwdHVhbCBzdHJ1Y3R1cmUgZm9yIGEgZ2l2ZW4gZ3JvdXAgb2YgcGFydGljaXBhbnRzIHZpYSBFRkEsIEkgdGhlbiBzb3VnaHQgdG8gZXhhbWluZSBhdHRyaWJ1dGlvbnMgb2YgbWVudGFsIGNhcGFjaXRpZXMgdG8gdGhlIHBhcnRpY3VsYXIgdGFyZ2V0IGNoYXJhY3RlcnMgaW5jbHVkZWQgaW4gZWFjaCBzdHVkeSB3aXRoaW4gdGhpcyBjb25jZXB0dWFsIHN0cnVjdHVyZTogVG8gd2hhdCBleHRlbnQgZGlkIHBhcnRpY2lwYW50cyBhdHRyaWJ1dGUgZWFjaCBvZiB0aGUgZnVuZGFtZW50YWwgY29tcG9uZW50cyBvZiBtZW50YWwgbGlmZSByZXZlYWxlZCBieSBFRkEgdG8gYSBnaXZlbiB0YXJnZXQgY2hhcmFjdGVyLCBhbmQgaG93IGRpZCB0aGlzIGF0dHJpYnV0aW9ucyB2YXJ5IHdpdGggYWdlIChlaXRoZXIgd2l0aGluIGFuIGFnZSBncm91cCBvciBiZXR3ZWVuIGFnZSBncm91cHMpPyAKClRvIGV4cGxvcmUgdGhpcyBxdWVzdGlvbiwgZm9yIGVhY2ggc3R1ZHkgSSBwcm9qZWN0ZWQgY2hpbGRyZW4ncyBkYXRhIGludG8gYWR1bHRzJyBjb25jZXB0dWFsIHNwYWNlIGFuZCBleGFtaW5lZCAiZmFjdG9yIHNjb3JlcyLigJRzdW1tYXJpZXMgb2YgZWFjaCBwYXJ0aWNpcGFudCdzIGF0dHJpYnV0aW9ucyBvZiBlYWNoIG9mIGZhY3RvcnMgcmV2ZWFsZWQgYnkgRUZBLiBJIHVzZWQgdGhlIGNvcnJlbGF0aW9uLXByZXNlcnZpbmcgInRlbiBCZXJnZSIgbWV0aG9kIChhcyBpbXBsZW1lbnRlZCBpbiB0aGUgInBzeWNoIiBwYWNrYWdlOyBSZXZlbGxlLCAyMDE4KSwgaW1wdXRpbmcgbWlzc2luZyB2YWx1ZXMgdXNpbmcgdGhlIG1lYW4gKGJ5IHRhcmdldCBjaGFyYWN0ZXIsIGNhcGFjaXR5LCBhbmQgYWdlIGdyb3VwKS4gVGhpcyB5aWVsZGVkIG9uZSBmYWN0b3Igc2NvcmUgZm9yIGVhY2ggb2YgKGFkdWx0cycpIGZhY3RvcnMsIGZvciBlYWNoIHBhcnRpY2lwYW50LiBJIGNvbnNpZGVyIHRoZXNlIHRvIGJlIHN1bW1hcmllcyBvZiB0aGF0IHBlcnNvbidzIGF0dHJpYnV0aW9ucyBvZiB0aGUgY29ycmVzcG9uZGluZyBsYXRlbnQgY29uc3RydWN0LgoKSSBhbmFseXplZCB0aGVzZSBmYWN0b3Igc2NvcmVzIHZpYSBtaXhlZCBlZmZlY3RzIEJheWVzaWFuIHJlZ3Jlc3Npb24gYW5hbHlzZXMgdXNpbmcgdGhlICJicm1zIiBwYWNrYWdlIGZvciBSIChCw7xya25lciwgMjAxNykuIEluIGFsbCBvZiB0aGVzZSBhbmFseXNlcywgSSBpbmNsdWRlZCB0aGUgbWF4aW1hbCByYW5kb20gZWZmZWN0IHN0cnVjdHVyZXMgZ2l2ZW4gdGhlIGRlc2lnbiBmb3IgdGhlIHJlbGV2YW50IHN0dWR5LiBGdXJ0aGVyIGRldGFpbHMgdmFyaWVkIGJ5IHN0dWR5LCBkZXBlbmRpbmcgb24gdGhlIG51bWJlciBvZiB0YXJnZXQgY2hhcmFjdGVycyBpbmNsdWRlZCBpbiB0aGF0IHN0dWR5LCB0aGUgbnVtYmVyIG9mIGZhY3RvcnMgcmV2ZWFsZWQgYnkgRUZBIGZvciB0aGUgcmVsZXZhbnQgZ3JvdXAocykgb2YgcGFydGljaXBhbnRzLCBhbmQgdGhlIGdvYWxzIG9mIHRoZSBhbmFseXNpcyAoZS5nLiwgY29tcGFyaW5nIHR3byBhZ2UgZ3JvdXBzIHZzLiBleGFtaW5pbmcgY29udGludW91cyBlZmZlY3RzIG9mIGFnZSB3aXRoaW4gb25lIG9yIG1vcmUgZ3JvdXBzIG9mIHBhcnRpY2lwYW50cykuCg==